AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EAccessViolation mit StringListe

Ein Thema von Edelfix · begonnen am 17. Mai 2017 · letzter Beitrag vom 17. Mai 2017
 
SebastianZ

Registriert seit: 23. Jul 2009
89 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: EAccessViolation mit StringListe

  Alt 17. Mai 2017, 08:49
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;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 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