| Autor |
Beitrag |
Krischa
      
Beiträge: 118
Windows 7 64 Bit
Delphi 2007
|
Verfasst: Mi 27.05.09 11:30
Delphi-Quelltext 1: 2: 3:
| showmessage(query1.FieldByName('Vp').value); netto2:=netto2+query1.fieldbyname('vp').Value; netto:=netto+query1.fieldbyname('vp').value; |
hallo,
warum wird netto(lokale variable) befüllt aber netto2(gloale variable) nicht?
kann es sein das es eine beschränkung der anzahl an variablen in delphi gibt?
|
|
freedy
      
Beiträge: 403
Erhaltene Danke: 1
Winows 7
Delphi XE
|
Verfasst: Mi 27.05.09 11:35
Hallo Krischa,
dein bisheriger Code sieht eigentlich gut aus. Da sollte nicht das Problem liegen. Hast du evtl. noch mehr?
Grüße,
Michael
|
|
Krischa 
      
Beiträge: 118
Windows 7 64 Bit
Delphi 2007
|
Verfasst: Mi 27.05.09 11:38
Welchen Teil soll ich noch reinstellen? Er befüllt halt Netto und Netto2 nicht.
Der Code war Ursprünglich ohne netto2 und hat funktioniert. Später ist mir Aufgefallen das ich die Werte noch brauche und wollte sie in einer globalen Variable speichern.
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); var rle,dmin,dmax,Name1,Name2,datensatz:string; rechn:Tstringlist; betrag,netto,mwsteuer,pfand:double; |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| implementation
{$R *.dfm} var hpfad,abe,kun,kun_s,art,mws,sko,mze,firma,pfad2,fma:string; pfad1,kun1,abe1,kun_s1,art1,mws1,sko1,mze1,firma1:string; sre,mwss:Tstringlist; ebetrag1,ebetrag2,ebetrag3,ebetrag4:double; netto0,netto1,netto2:double; |
|
|
freedy
      
Beiträge: 403
Erhaltene Danke: 1
Winows 7
Delphi XE
|
Verfasst: Mi 27.05.09 11:42
Was passiert denn, wenn du Netto2 := Netto; setzt?
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mi 27.05.09 11:45
Was heißt, Netto2 wird nicht befüllt?
Was steht vorher drin, was steht nachher drin und was steht in den Value von Deinen Field?
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Krischa 
      
Beiträge: 118
Windows 7 64 Bit
Delphi 2007
|
Verfasst: Mi 27.05.09 11:47
Also habe jetzt folgendes gemacht:
Delphi-Quelltext
aber es kommt immernoch 0 bei netto2 raus
Irgendwie bekomme ich das gefühl er gibt netto2 keinen Speicherplatz
@[quote]nersgatt Er weißt der variablen den Wert nicht zu und bei der Ausgabe ist sie dann halt 0. und in den Feldern der DB sind auch zahlen drinsonst hätte er ja netto nichts zuweisen können.
Zuletzt bearbeitet von Krischa am Mi 27.05.09 11:51, insgesamt 1-mal bearbeitet
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 27.05.09 11:49
Hast Du schon durchgesteppt und Dir den Variableninhalt mal angeschaut?
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 27.05.09 11:52
Außerdem solltest du bei derart vielen globalen Variablen mal dein Konzept überdenken, ist ja kein Wunder, dass es da Probleme gibt. Das kann man ja kaum noch überblicken (zumindest später) auf was von wo zugegriffen wird...
|
|
Krischa 
      
Beiträge: 118
Windows 7 64 Bit
Delphi 2007
|
Verfasst: Mi 27.05.09 11:56
Bei durchstepen ist netto2 immer 0.
und zum überblick mit den Variablen. Ich arbeite an einem größeren Projekt und habe auch Listen mit Variablen und deren Eigenschaften(wo deklariert, wo befüllt,...). Den überblick verliert man nicht sooo schnell 
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 27.05.09 12:10
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 27.05.09 12:18
Ich würde nach Möglichkeit auch auf globale Variablen verzichten und stattdessen Properties definieren. Diese haben u.a. den Vorteil, dass sie an eine Instanz gebunden sind, d.h. wenn Du 2 Instanzen derselben Klasse erzeugst, greifen beide auf Ihre eigenen Properties zurück, wobei sie sich globale Variablen im worst case gegenseitig überschreiben.
|
|
Krischa 
      
Beiträge: 118
Windows 7 64 Bit
Delphi 2007
|
Verfasst: Mi 27.05.09 12:20
Also beim Durchsteppen zeigt er nun doch die korrekten Werte an. Aber wenn ich dann darauf zugreifen will sind sie wieder 0. Die variable wird aber nicht auf 0 zurückgesetzt. Und nein es gibt keine zweite Variable von dem Namen. Sobald er mit der Schleife fertig ist sind die Werte wieder 0.
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mi 27.05.09 12:34
Dann zeigt man die ganze Schleife.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Krischa 
      
Beiträge: 118
Windows 7 64 Bit
Delphi 2007
|
Verfasst: Mi 27.05.09 12:46
Habe das Problem gelöst, aber weiß nicht warum.
Ich habe nach jedem Schleifendurchlauf ein showmessage(floattostr(netto2)); gemacht und auf einmal konnte er sich den wert merken.

|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 27.05.09 12:48
Also das hört sich dann fast nach einem Speicherproblem aus...
Warum solche Fehler zufällig irgendwo andere unerklärliche Fehler verursachen habe ich hier mal (nicht auf den PC bezogen) erklärt:
www.delphi-forum.de/....php?p=527022#527022
(Und auch warum ein simples ShowMessage das beheben kann.)
Wenn das eine lokale danach nicht mehr verwendete Variable wäre, würde die einfach wegoptimiert, aber bei einer globalen sollte das nicht passieren. Im Debugger kann das aber schon trotzdem so sein, wenn die Optimierung eingeschaltet ist (sollte sie beim Debuggen ja nicht sein).
|
|
Krischa 
      
Beiträge: 118
Windows 7 64 Bit
Delphi 2007
|
Verfasst: Mi 27.05.09 12:52
Sehr interessanter Beitrag. Also hat mein showmessage den SPeicher für die Variable verändert? Und warum tauchen solche Probleme auf? Und nun habe ich das showmessage wieder gelöscht und es geht immernoch! 
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 27.05.09 12:55
Sehr oft passiert so etwas bei dynamischen Arrays, wo man aus Versehen den Bereich überschritten hat und auf nicht existierende Indizes schreibt.
Die Bereichsüberprüfung sollte das in den meisten Fällen dann melden, diese lässt sich hier einschalten:
Projekt --> Optionen... --> Compiler --> Laufzeitfehler --> Bereichsüberprüfung
oder in neuen Versionen:
Projekt --> Optionen... --> Delphi-Compiler --> Compilieren --> Laufzeitfehler --> Bereichsüberprüfung
Das deckt in den meisten Fällen auf, wenn du z.B. einen Index größer als der maximale Index in einem dynamischen Arrays benutzt.
|
|