Hallo Andreas,
vielleicht möchtest du deine Prozedur noch etwas verbessern. Der Zweck scheint mir das versuchsweise Einfügen eines Datensatzes in eine Datenbank-Tabelle zu sein - bei Misserfolg das Wegschreiben in eine Protokolldatei. Leider hast du weder das verwendete RDBMS noch die Zugriffskomponenten mitgeteilt.
Die Datenbanktabelle scheint mir von einem Tool angelegt worden zu sein. Vermutlich könntest du die Daten auch mit diesem oder einem anderen Tool importieren - ohne eine einzige Zeile Code geschrieben zu haben. Wenn du mit den
BDE-Komponenten arbeiten solltest, dann würde dir TBatchMove die Arbeit vielleicht erleichtern.
Wenn du aber deinen Weg weiter gehen möchtest, dann besser so:
Delphi-Quellcode:
procedure TMainForm.TryInsertRecord(q: TQuery; s: TStrings);
var
i: Integer;
begin
with q do
begin
for i := 0 to Pred(ParamCount) do
Params[i].Value := s[i];
try
ExecSql;
except
Log(s); //
end;
end;
end;
Import-Fehler entstehen bei deiner Vorgehensweise schon dann, wenn die Daten ein Apostroph enthalten. Bereite die
Query-Komponente nur einmal vor und in der Prozedur TryInsertRecord() werden dann einfach nur die Parameterwerte ausgetauscht.
Auch die Vorbereitung der Protokoll-Datei mit AssignFile() muss nicht mehrere tausendmal ausgeführt werden. Diesen Code solltest du besser in die aufrufende Prozedur auslagern. Öffnen und Schließen kannst du die Datei in der Prozedur Log() nach folgendem Muster:
Delphi-Quellcode:
procedure TMainForm.Log(s: TStrings);
begin
if FileExists(LogFileName)
then Append(LogFile)
else Rewrite(LogFile);
WriteLn(LogFile, s.CommaText);
CloseFile(LogFile);
end;
Getippt und nicht getestet.
Grüße vom marabu