Hallo Hansa,
mache doch einfach mal ein
Code:
FireDacQuery.SQL.Text:= 'insert into TABLE (NR,BEZ) values (:nr,:be)'; // vor der Schleife -> nur einmal zuweisen. Macht bei den heutigen Rechnern kaum einen Unterschied.
FireDacQuery.ParamByName('nr').AsInteger:= i + 100; //die Parametersyntax könnte ggf. abweichen
FireDacQuery.ParamByName('be').AsInteger:= i;
FireDacQuery.ExecSQL;
Wie schon gefragt. (Antwort vieleicht überlesen) Wird der Generator erhöht wenn dein Fehler kommt?
Hansa schrieb weiter oben, dass der Trigger funktioniert.
Aber ließe sich der obige Code nicht noch erweitern, in dem man immer eher sowas macht:
Delphi-Quellcode:
sSQL := 'insert into TABLE (NR,BEZ) values (%d,%s);';
DM.Query.SQL.Clear;
DM.Trans.StartTransaction;
for i := 1 to n do begin
DM.Query.SQL.Add(Format(sSQL,[i + 100,QuotedStr(i)]));
if i Mod 1000 = 0 then begin
DM.Query.ExecSQL;
DM.Trans.Commit;
mem1.Lines.Add(IntToStr(i));
DM.Query.SQL.Clear;
DM.Trans.StartTransaction;
end;
end;
Hier werden dann halt immer 1000 Inserts an einem Stück an die Datenbank gegeben und von ihr verarbeitet, statt satzweise. Hab' sowas in de Art vor Jahren mal bei 'ner
SQL-Server-Datenbank gemacht, dass hat bei der zu verarbeitenden Datenmenge etliche Stunden Zeitersparnis gebracht.