| Autor |
Beitrag |
Nightfly
      
Beiträge: 163
|
Verfasst: Di 07.10.03 12:05
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Di 07.10.03 12:57
Das liegt daran, dass deine Button-Click Prozedur keine einfache Prozedur sondern eine Methode deiner Form ist, daher kannst du von dieser Methode auf die Objekte deiner Form zugreifen. Du hast jetzt also 2 Möglichkeiten - entweder du machst aus deiner Prozedur eine Methode (würde ich empfehlen) oder aber du greifst über die globale Variable deiner Form auf die einzelnen Objekte und Felder zu.
Zu 1)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| type TForm1 = class(TForm) public procedure Berechne; end;
implementation
procedure TForm1.Berechne; begin end; |
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Zuletzt bearbeitet von Motzi am Di 07.10.03 13:02, insgesamt 1-mal bearbeitet
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Di 07.10.03 13:00
Hallo,
da der Code der Procedure außerhalb Deines Objektes liegt, musst Du die betroffenen Tabellen als Parameter mitgeben:
Delphi-Quelltext 1: 2: 3:
| Procedure Berechne(Table2, Table2Summe:TTable); ... ... |
Noch ein paar Anmerkungen: muss Deine Schleife nicht von 1 bis RecordCount laufen? Was soll das Table2.Edit? Muss es nicht Table2Summe.Edit lauten?
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
HTTL
Hält's aus hier
Beiträge: 9
|
Verfasst: Di 07.10.03 13:14
ohoh da is einer über die oop gestoplert.
Du könnntest auch einfach das Formular auf dem die table steht mit angeben dann würde dein sourcecode wie folgt ausehen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| Procedure Berechne; Var loop,maxRec : Integer; Begin form1.Table2.FindFirst; maxRec := form1.Table2.RecordCount; for loop := 0 to maxRec do begin form1.Table2.Edit; form1.Table2Summe.Value := Table2Jan.Value +form1.Table2Feb.Value +form1.Table2Mar.Value +form1.Table2Apr.Value +form1.Table2Mai.Value +form1.Table2Jun.Value +form1.Table2Jul.Value +form1.Table2Aug.Value +form1.Table2Sept.Value +form1.Table2Okt.Value +form1.Table2Nov.Value +form1.Table2Dez.Value; form1.Table2.FindNext;
end;
end; |
das ist jetzt exemplarisch für formular 1. wenn du die Table auf form2 hast isses analog. Wenn du das form umbenannthast setz den namen davor
Ich persönlich löse solche sachen aber auch lieber so wie smiegel es macht, für einfache Anwendungen brauchste des aber nicht =)
mfg httl
Moderiert von Klabautermann: Code- in Delphi-Tags geändert.
|
|
Nightfly 
      
Beiträge: 163
|
Verfasst: Di 07.10.03 13:39
Hmmm, hab's jetzt so gemacht wie von Motzi vorgeschlagen, scheint mir das Übersichtlichste zu sein..hat das gravierende Nachteile?
Kann mir jemand den unterschied zwischen Prozedur und Methode klar machen?
@HTTL
Frag mich nich warum, aber dein Vorschlag geht nicht. Das ich das Formular davor schreibe kenn ich, aber das Problem mit der Prozedur hier findet ja in der Unit statt die zu dem Formular gehört,wo Table2 auch liegt. Ich konnte ja auch in jeder Methode (wie ich grad gelernt hab) drauf zugreifen,jedoch nicht in meiner Prozedur.
@smiegel (hmm, will da immer Smeagol schreiben, ich sollte weniger herr der ringe gucken) Table2.Edit versetzt einfach die TAbelle in den edit Modus, Table2Summe ist ja bloß ein Feld.
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Di 07.10.03 13:52
Hallo,
@nightfly:
Mich hat Table2Summe.Value stutzig gemacht. Was ist das für eine Variable?
Warum musst Du die Tabelle in den Edit-Modus versetzen, wenn Du nur lesend auf die Felder zugreifts?
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
Nightfly 
      
Beiträge: 163
|
Verfasst: Di 07.10.03 14:04
Das ist meine Art auf Werte in der Tabelle zuzugreifen. Table2Summe ist ein Feldname (nämlich das Feld Summe in der Tabelle2) und .Value enthält dann den wert.
Also greife ich ja nicht nur lesend auf die TAbelle zu, denn Table2Summe.Value bekommt ja was zugewiesen...
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Di 07.10.03 14:17
Hallo,
ich glaube jetzt verstehe ich was Du meinst. Du hast jedem Feld Deiner Tabelle einen eigenen Namen vergeben. Warum greifst Du nicht mit Fields['Feldname'] auf die Feldbezeichner zu?
Damit lässt sich auch Dein Problem, die Auslagerung des Codes in eine Procedure, leichter lösen.
Sicherlich wäre es auch hilfreich zu wissen, mit welchem Mechanismus Du auf die Tabelle zugreifst (ADODataset, _RecordSet, ...)?
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Di 07.10.03 14:20
Nein, es hat keine Nachteile, im Gegenteil.. es das naheliegendste und sinnvollste das ganze in einer Methode zu kapseln!
Der Unterschied zwischen einer Methode und einer Prozedur ist im großen und ganzen nur, dass eine Methode intern einen versteckten Parameter mehr mitführt (die Self-Referenz).
Schau dir vielleicht mal meine OOP-Ausarbeitung an: www.x-spy.net/personal
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
HTTL
Hält's aus hier
Beiträge: 9
|
Verfasst: Di 07.10.03 15:11
Night du solltest wenn du ein problem hast mal dran denken etwas genauere Angaben zur struktur zu geben. Hab gedacht das läuft alles über eine unit. Es ist bedingt möglich (ich weiß nicht genau in welchen fällen) die unit vor den Parameter zu schreiben dann würde das exemplarisch so aussehen
Quelltext 1: 2: 3: 4: 5: 6: 7:
| unit x
uses unity
...
unity.form1.table...dosomething |
Da du aber keine Kreuzlinks verankern kannst kann es sein das es bei dir nicht Funktioniert (du kannst nur von einer unit zur andern linken, nicht umgekehrt), aber ich kann mich erinnern das ich das mal innem Programm von mir gemacht hab.
Zum Thema OOP, schau es dir an, es hilft wenn man die ganze Struktur eines Formulares versteht =)
|
|
|