Zitat von
Nersgatt:
Das Prinzip ist, die eigentliche
Query nur einmal zu erstellen (Firebird muss dann auch nur einmal den Querytext parsen und prüfen, ob die Syntax passt).
In Deiner Schleife füllst Du dann nur noch die Parameter.
Für Deinen Fall würde das ungefähr so aussehen (aus dem Kopf zusammen geschrieben, Teilweise Pseudo-Code):
Delphi-Quellcode:
sqFirebird.SQL.Clear;
sqFirebird.SQL.Add('INSERT INTO ' + cbFirebirdTable.Text + '(NUMMER, OBERBEGRIFF) VALUES (:Nummer, :Oberbegriff)');
sqFirebird.PrepareStatement; {Veranlasst Firebird, die Syntax zu prüfen und die Auflistung der Paramter wird erstellt}
FÜR ALLE DATENSÄTZE AUS DER QUELLTABELLE (Schleife)
{Werte in die Parameter schreiben}
sqFirebird.ParamByName('NUMMER').AsString := tblBDE.FieldByName('Nummer').AsString;
sqFirebird.ParamByName('Oberbegriff').AsString := tblBDE.FieldByName('Oberbegriff').AsString;
sqFirebird.Prepared := True;
sqFirebird.ExcecSQL(); {und abfeuern}
NÄCHSTER DATENSATZ
So ungefähr.
Gruß,
Jens
mhm ... funzt irgendwie net ... also ich hab in der
Query die Params hinzugefügt ... mein code sieht so aus ...
Delphi-Quellcode:
if tblBDE.TableName = 'ART.DB' then
begin
tblBDE.First;
while not tblBDE.Eof do
begin
sqFirebird.ParamByName('Nummer').AsString := tblBDE.FieldByName('Nummer').AsString;
sqFirebird.ParamByName('Oberbegriff').AsString := tblBDE.FieldByName('Oberbegriff').AsString;
with sqFirebird.SQL do
begin
Clear;
Add('INSERT INTO ' + cbFirebirdTable.Text + '(NUMMER, OBERBEGRIFF) VALUES(:Nummer, :Oberbegriff)');
sqFirebird.PrepareStatement;
end;
sqFirebird.Prepared := True;
sqFirebird.ExecSQL();
tblBDE.Next;
end;
end
dann bekomm ich zur Laufzeit eine
Exception sobald ExecSQL() ausgeführt wird ...
Exception-Klasse EDatabaswError mit Meldung 'sqFirebird: Die Feldnamen für %s konnten nicht erkannt werden'