![]() |
Variablen werden überschrieben!?
Hallo,
ich steh vor einem komischen Problem. Und zwar scheint es als würden die Werte meiner Variablen auf Grund eines Methodenaufruf's überschrieben werden. Jedenfalls konnte ich das im Debugger beobachten. Hat jemand eine Idee?
Delphi-Quellcode:
PS: Dazu ist noch zu sagen das "BTGetRec" eine Methode von BTreeFiler ist.
procedure TDemoForm.Button1Click(Sender: TObject);
var CurrentRow: Integer; maxExport : Integer; Next : Boolean; A: PersonDef; Current: PersonDef; RefNr: LongInt; Key: IsamKeyStr; begin CurrentRow := 0; maxExport := 0; Next := true; while ((Next = true) and (maxExport < 100)) do begin Next := NextRecord(A, RefNr, 1, Key, true); if (Next = true) then BTGetRec(PersFB, RefNr, Current, False); //nach dem Aufruf dieser Methode ist "Next" z.B "false", warum? Inc(CurrentRow); Inc(maxExport); end; end; |
AW: Variablen werden überschrieben!?
Entferne dringend mal das
Delphi-Quellcode:
und probiere es nochmal
= true
BTW Ist
Delphi-Quellcode:
eine Funktion oder Procedure?
BtGetRec
|
AW: Variablen werden überschrieben!?
Zitat:
Delphi-Quellcode:
(Aus der Doku)
procedure BTGetRec;(IFBPtr : IsamFileBlockPtr; RefNr : LongInt; var Dest; ISOLock : Boolean);
|
AW: Variablen werden überschrieben!?
Ob du
Delphi-Quellcode:
vergleichst oder einfach nur
Next = true
Delphi-Quellcode:
ist gehopst wie gesprungen.
Next
Next ist True Next = true ergibt True Next ergibt True Next ist False Next = true ergibt False Next ergibt False Vergleiche mit True oder False kannst du dir also sparen. Die Boolean-Variable reicht für sich allein. |
AW: Variablen werden überschrieben!?
Zitat:
|
AW: Variablen werden überschrieben!?
Zitat:
Delphi-Quellcode:
und
Next = true
Delphi-Quellcode:
können unterschiedliche Ergebnisse liefern.
Next
Delphi-Quellcode:
ist wie
if Next
Delphi-Quellcode:
und
if Next <> False
Delphi-Quellcode:
stimmt nur dann, wenn in
if Next = true
Delphi-Quellcode:
eine 1 enthalten ist.
Next
Das ist auch der Grund, warum man nie auf true prüfen soll Zitat:
Delphi-Quellcode:
dann liest sich das viel besser und das (fehlerträchtige)
HasNext
Delphi-Quellcode:
sieht irgendwie komisch aus, was es halt auch ist. ;)
= true
|
AW: Variablen werden überschrieben!?
Zitat:
Aber jetzt doch bitte back2topic :) |
AW: Variablen werden überschrieben!?
Bist du mit dem Debugger denn schon mal durch diese Routine BTGetRect gelaufen und hast geschaut, ab wann in Next auf einmal False steht?
Irgendwann muss das dort ja passieren |
AW: Variablen werden überschrieben!?
So wie ich das gemeint habe stimmt es schon. Ich hab es später konkretisiert. In dem ersten Fall habe ich gemeint, dass wenn Next True ist, es gehopst wie gesprungen ist ob man mit
Delphi-Quellcode:
vergleicht oder einfach nur mit
Next = true
Delphi-Quellcode:
. Ich dachte es wird so verstanden.
Next
Ob man es prüft oder nicht ist so eine Sache. In Visual Basic hat man es geprüft. Ich bin von VB Programmieren ständig drauf hinweisen, dass ich da was vergessen habe. Wenn es in einer Sprache üblich ist, kann es in einer anderen nicht falsch sein, höchstens unnötig. |
AW: Variablen werden überschrieben!?
Zitat:
Delphi-Quellcode:
Procedure BTGetRec ( IFBPtr : IsamFileBlockPtr;
RefNr : LongInt; Var Dest; ISOLock : Boolean ); {-Gets the specified record from the given reference} Edit: Moment, habe noch eine Filer.inc gefunden. Muss mal schauen wie ich die einbinden, sodass ich über den Debugger drauf zugreifen kann. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 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 by Thomas Breitkreuz