![]() |
AW: Variable ist plötzlich anders
Sicher, dass sich der Inhalt ändert, oder zeigt der Debugger nur nicht mehr das Richtige an?
Inhalt manuell irgendwo ausgeben (Logdatei, ShowMessage, ...) Zitat:
Zitat:
Statt TTable kannst'e auch ein TClientDataSet (MemoryTable) verwenden, wenn noch keine Datenbank vorhanden ist. Und schon kannst'e auch schön mit Locate im DataSet suchen lassen. |
AW: Variable ist plötzlich anders
Dann muss wohl irgendwas mit Kundenummer geschehen. Du sagtest, es gibt die variable nur einmal.
Benenne sie im Prozedurkopf trotzdem mal um und teste das. Eine andere wahrscheinlich dumme Idee, nur zum testen: deklariere mal eine lokale string-Variable und weise ihr VOR der for-Schleife "Kundennummer" zu. Du vergleichst dann auf diese neue string-Variable und nicht mehr auf Kundennummer. |
AW: Variable ist plötzlich anders
Kundennummer ist ein Parameter der Methode,
also selbst wenn jemand zwischendurch außerhalb eine Variable ändert, die zu Beginn an diesen Parameter übergeben wurde, darf sich niemals der Wert dieses Parameters ändern, außer jemand ändert ihn innerhalb dieser Methode, was hier ja angeblich nicht gemacht wird. Also ein Umkopieren in eine weitere lokale Variable sollte hier nichts bringen, vorallem da es sich am Ende um die selbe String-Referenz handelt. Einzige Ausnahme für das NIEMALS: BufferOverflow oder Dergleichen. Danach sieht es in dem gezeigten Code aber auch nicht aus. Änderung innerhalb der Methode könnte man auch mal so ausschließen:
Delphi-Quellcode:
procedure TUKunden.FirstKundenSuchen(const KundenNummer: String; var KName1, ...
Wenn das nichts bringt, dann bleiben nur 2 mögliche Problemstellen. * der Compiler zeigt etwas Falsches an und das Programm arbeitet dennoch korrekt (prüfen siehe mein vorheriger Post) * du hast ein massives Speicherproblem und jemand (du) überschreibt irgendwo willkürlich deinen RAM. (aber schon komisch, dass dabei rein zufällig ein "korrekter" String mit einer schönen "Nummer" als Text entsteht) |
AW: Variable ist plötzlich anders
Zitat:
|
AW: Variable ist plötzlich anders
Zitat:
Aber gerade aufgrund des Types hätte ich eher erwartet, dass er dann garnichts, bzw. eine Fehlermeldung anzeigt, als rein zufällig einen "anderen" String, den er scheinbar problemlos auslesen konnte. |
AW: Variable ist plötzlich anders
Zitat:
|
AW: Variable ist plötzlich anders
Delphi-Quellcode:
procedure TUKunden.FirstKundenSuchen(KundenNummer: String; var KName1, KName2, KStrasse, KLand, KPLZ, KOrt, KTelefax, KEmail, KVertreter, KRnEmail: String);
var i: Integer; begin for i := 0 to UKunden.KundenSpeicherSG.RowCount -1 do begin if (KundenNummer = UKunden.KundenSpeicherSG.Cells[CKundenNr, i]) then [COLOR="Red"]// <- hier wird nach Kundennummer 12652 gesucht[/COLOR] begin if (UKunden.KundenSpeicherSG.Cells[CKundenRNAnschrift, i] = (UKunden.KundenSpeicherSG.Cells[CKundenLfdNr, i])) then [COLOR="Red"]// -< und hier ist der Inhalt von KundenNummer plötzlich 14109[/COLOR] begin KName1 := UKunden.KundenSpeicherSG.Cells[CKundenName1, i]; KName2 := UKunden.KundenSpeicherSG.Cells[CKundenName2, i]; KStrasse := UKunden.KundenSpeicherSG.Cells[CKundenStr, i]; KLand := UKunden.KundenSpeicherSG.Cells[CKundenLand, i]; KPLZ := UKunden.KundenSpeicherSG.Cells[CKundenPLZ, i]; KOrt := UKunden.KundenSpeicherSG.Cells[CKundenOrt, i]; KTelefax := UKunden.KundenSpeicherSG.Cells[CKundenTelefax, i]; KEmail := UKunden.KundenSpeicherSG.Cells[CKundenEMail, i]; KVertreter := UKunden.KundenSpeicherSG.Cells[CKundenVertreter, i]; KRnEmail := UKunden.KundenSpeicherSG.Cells[CKundenRnEMail, i]; exit; end; end; end; KName1 := 'Keine Daten gefunden ! '; (* Kann eigentlich nicht vorkommen :-D *) end;
Delphi-Quellcode:
Die beiden Routinen sind überhaupt nicht gleich, es besteht allerhöchstens eine oberflächliche Ähnlichkeit.
procedure IchBinKomisch(KundenNummer: String; var Rueckgabewert: String);
var i: Integer; begin for i := 0 to UKunden.KundenSpeicherSG.RowCount -1 do begin if (KundenNummer = StringGrid[1, i]) then begin if (StringGrid[2, i] = (StringGrid[3, i])) then begin Rueckgabewert := 'Gefunden'; exit; end; end; end; Rueckgabewert := 'Keine Daten gefunden ! '; (* Kann eigentlich nicht vorkommen :-D *) end; Die erste ist Teil einer Klassendefinition, die zweite ist "unabhängig". In der ersten sollten alle UKunden durch self ersetzt werden. Ebenso sollte
Delphi-Quellcode:
durch
procedure TUKunden.FirstKundenSuchen(KundenNummer: String; var....
Delphi-Quellcode:
ersetzt werden.
procedure TUKunden.FirstKundenSuchen(const KundenNummer: String; var....
in der zweiten wird die Laufvariable durch
Delphi-Quellcode:
begrenzt und auf
UKunden.KundenSpeicherSG.RowCount -1
Delphi-Quellcode:
zugegriffen. Das ist zumindest ungewöhnlich. Woher kommt "Stringgrid" ?
StringGrid[1, i]
Gruß K-H P.S. Sind die üblichen Prüfungen (Bereich etc.) aktiviert? |
AW: Variable ist plötzlich anders
Zitat:
Ich schreib morgen zu dem ganzen anderen Rest und teste mal die verschiedenen Tips aus ! Gruß und Gute Nacht Hans |
AW: Variable ist plötzlich anders
Zitat:
Delphi-Quellcode:
gar nicht schreiben ?
procedure IchTuWas(XYZ: String);
Wie dem auch sei - das habe ich entsprechend umgesetzt und alle Aufrufe entsprechend gemacht. |
AW: Variable ist plötzlich anders
Mit der Angabe von Const kann der Parameter auch innerhalb der Procedure/Function nicht verändert werden. Außerdem kann der Compiler besser optimieren.
Etwas ausführlicher: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz