Hallo.
Ich habe eine Situation die ich leider nicht nachvollziehen kann.
Es geht um eine
Access Vialotion in eine Quelcode Zeile die nur ab und zu kommt.
Ich konnte den Fehler noch nicht nachstellen. Nur Nachträglich im LogFile auslesen.
Die abgekürzte fassung der Funktion:
Delphi-Quellcode:
Function TDMAng.CheckRV(RD:TStringList;var errlist:TStringList):boolean;
begin
result:=true;
if not assigned(errlist) then errlist:=TStringList.Create;
errlist.Clear;
//viele Prüfungen ...
if bPasstNicht then
errlist.Add('"215","'+'Hinweis: '+'Passt nicht!')
//viele Prüfungen...
result:= errlist.count=0;
end;
Wie schon gesagt wurde, wird hier die Liste mit free vorderbei freigegeben.
Ich würde die Liste nicht als Var-Parameter übergeben. Dadurch ist nicht mehr ersichtlich wer die Hoheit über die Liste hat, und wer sie freizugeben hat.
Sauberer wäre aus meiner Sicht, du baust eine lokale Liste auf, gibst nur den String zurück, und fügst den String dann in die eigentliche Liste ein.
Also so in etwa:
Delphi-Quellcode:
function CheckRV(RD:TStringList; out ErrorText: String): Boolean;
var
ErrorList: TStringList;
begin
ErrorList := TStringList.Create;
try
result:=true;
//viele Prüfungen ...
if bPasstNicht then
ErrorList.Add('"215","'+'Hinweis: '+'Passt nicht!')
//viele Prüfungen...
result:= ErrorList.count=0;
ErrorText := ErrorList.Text;
finally
FreeAndNil(ErrorList);
end
end;
procedure foo;
var
lstError: TStringList;
ErrorText: String;
begin
lstError := TStringList.Create;
try
if not CheckRV(dummy, ErrorText) then
lstError.Text := lstError.Text + ErrorText;
finally
FreeAndNil(lstError);
end
end;