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;