Einzelnen Beitrag anzeigen

günni0
(Gast)

n/a Beiträge
 
#1

Record über mehrere Prozeduren hinweg übergeben

  Alt 11. Apr 2018, 18:39
Dadurch, dass ich Code aufgeräumt habe, ist ein neues Problem entstanden.
Ich demonstriere es am besten mit Dummy-Code

Unit 1
Delphi-Quellcode:
// procedure 1
var // <== NICHT global, sondern in Procedure 1 !
 DataRecord: TDataRecord;
begin
 DataRecord.A := -1;
 DataRecord.B := 2;
 // usw

 DataUnit.ProcA(DataRecord);
Unit 2
Delphi-Quellcode:
// procedure 2
procedure TDataUnit.ProcA(aDataRecord: TDataRecord);
begin
 if not IsDataOK(aDataRecord) then
  Exit;

 showmessage( aDataRecord.A ); // ist noch immer -1, sollte 0 sein.
 // ansonsten erzeuge hier Klasseninstanz von XYZ anhand der Daten von aDataRecord + schiebe diese Instanz in eine generische TList.
end;
Delphi-Quellcode:
// procedure 3
functionTDataUnit.IsDataOK(var aDataRecord: TDataRecord): Boolean;
begin
 Result := False;

 // überprüfe Daten (strings und integer) aus aDataRecord.
 // Wenn etwas kaputt ist, korrigiere es. Beispiel

 if aDataRecord.A < 0 then
  aDataRecord.A := 0;

 // Bei einer ganz bestimmten Sache wird ggf. Raise ausgelöst (von mir). Dann wird eh abgebrochen.

 Result := True;
end;
Ich dachte, dass ich wegen des Var-Parameters in IsDataOK() in Prozedur 3 nun die korrigierten Daten in Prozedur2 weitergeben kann.

Wo ist mein Fehler?
Ich könnte das Record auch in der Unit-2 selber deklarieren statt in Unit 1 in der Prozedur.
Aber ich weiß nicht ob das Nebenwirkungen hat. Dann wär ich aber die ganzen var-Parameter los.

Geändert von günni0 (11. Apr 2018 um 19:11 Uhr)
  Mit Zitat antworten Zitat