Autor Beitrag
Krischa
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 118

Windows 7 64 Bit
Delphi 2007
BeitragVerfasst: Mi 27.05.09 11:30 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 403
Erhaltene Danke: 1

Winows 7
Delphi XE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 118

Windows 7 64 Bit
Delphi 2007
BeitragVerfasst: 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.

ausblenden 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;



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
implementation

{$R *.dfm}
var //Variablen allgemein
    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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 403
Erhaltene Danke: 1

Winows 7
Delphi XE
BeitragVerfasst: Mi 27.05.09 11:42 
Was passiert denn, wenn du Netto2 := Netto; setzt?
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mi 27.05.09 11:45 
Was heißt, Netto2 wird nicht befüllt? :gruebel:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 118

Windows 7 64 Bit
Delphi 2007
BeitragVerfasst: Mi 27.05.09 11:47 
Also habe jetzt folgendes gemacht:
ausblenden Delphi-Quelltext
1:
netto2:=netto2+netto;					

aber es kommt immernoch 0 bei netto2 raus :cry:

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



BeitragVerfasst: Mi 27.05.09 11:49 
Hast Du schon durchgesteppt und Dir den Variableninhalt mal angeschaut?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 118

Windows 7 64 Bit
Delphi 2007
BeitragVerfasst: 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 :D
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 27.05.09 12:10 
user profile iconKrischa hat folgendes geschrieben Zum zitierten Posting springen:
Bei durchstepen ist netto2 immer 0.
Und du bist sicher, dass du nirgends eine gleichnamige Variable oder Eigenschaft hast?

user profile iconKrischa hat folgendes geschrieben Zum zitierten Posting springen:
Ich arbeite an einem größeren Projekt und habe auch Listen mit Variablen und deren Eigenschaften(wo deklariert, wo befüllt,...).
Sowas brauche ich erst gar nicht, globale Variablen benutze ich praktisch nicht und die Namen der Eigenschaften sind so gewählt, dass man ohnehin direkt sieht was drin steht.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 118

Windows 7 64 Bit
Delphi 2007
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 118

Windows 7 64 Bit
Delphi 2007
BeitragVerfasst: 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.

:shock:
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 118

Windows 7 64 Bit
Delphi 2007
BeitragVerfasst: 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! :lol:
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.