Einzelnen Beitrag anzeigen

Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
318 Beiträge
 
Delphi 10.4 Sydney
 
#1

Gelöst: Objectlist nach Exception gelöscht

  Alt 1. Mär 2012, 13:36
Delphi-Version: XE
Hallo,

ich rufe eine procedure auf mit Werkzeugliste(Objectlist) als Parameter. In der procedure fange ich einen Fehler mit try-except ab und will den Fehler behandeln. Nachdem die Exception aber verarbeitet ist, ist meine Werkzeugliste leer, FList ist nil, count und capacity 0.
Die Schleife läuft durch einige Werkzeuge korrekt durch, bis sie auf ein ungültiges Grafikformat trifft und die Exception ausgelöst wird. In der Exception selbst ist die Werkzeugliste auch noch korrekt, aber sobald ich aus dem Exception-Block steppe, geht die Liste auf null.

Code:
procedure TdmWerkzeugBasis.LoadWerkzeugliste(Werkzeugliste: TWerkzeugliste);
var
  aWerkzeug: TWerkzeug;
  converter: TObjectListXMLKonverter;
resourcestring
  strInvalidGraphic = 'Grafik für Werkzeug %s kann nicht gelesen werden und wird gelöscht. Grafik neu einfügen';
begin
  converter:=TObjectListXMLKonverter.Create;
  try
    IBQWerkzeugliste.sql.text := 'select * from tools order by name';
    IBQWerkzeugliste.Open;
    while not IBQWerkzeugliste.EOF do
    begin
      aWerkzeug     := TWerkzeug(converter.XMLToVirtualPersistent(IBQWerkzeugliste.FieldByName('DATA').AsString));;
      aWerkzeug.Name := IBQWerkzeugliste.FieldByName('NAME').AsString;
      aWerkzeug.OID := IBQWerkzeugliste.FieldByName('OID').AsInteger;

      try
        LoadWMFFromDatabase(IBQWerkzeugliste.FieldByName('WMF_GRAFIK'), aWerkzeug.WmfGrafik);
      except
        On EInvalidGraphic do
        begin
          DeleteWerkzeugGrafikWMF(aWerkzeug.OID);
          MessageDlg(Format(strInvalidGraphic,[aWerkzeug.Name]), mtError, [mbOK], 0);
        end
        else
          raise;
      end;

      Werkzeugliste.Add(aWerkzeug);
      IBQWerkzeugliste.next;
    end;
    IBQWerkzeugliste.Close;
  finally
    converter.free;
  end;
end;

procedure TdmWerkzeugBasis.DeleteWerkzeugGrafikWMF(const WerkzeugId: Integer);
begin
  SQLQuery.SQL.Text:='Update tools set wmf_grafik=null where oid=:werkzeugid';
  SQLQuery.Params.ParamByName('werkzeugid').AsInteger:=WerkzeugId;
  SQLQuery.ExecSQL();
end;

Geändert von Rainer Wolff ( 1. Mär 2012 um 14:03 Uhr)
  Mit Zitat antworten Zitat