接続を何度も再作成したり、クエリを再作成したりしないでください。クエリにパラメータを使用します。接続を1回開き、クエリのパラメータを入力して実行し、クエリを閉じて(接続は除く)、クエリパラメータを再度入力して、もう一度実行します。
このようなもの(Advantage Database Serverを使用しますが、概念は同じです):
// Both Create() calls should be followed by try..finally to ensure they're
// cleaned up after. Omitted for brevity.
Conn := TAdsConnection.Create(nil);
// Configure connection parameters here
Conn.Open;
Qry := TAdsQuery.Create(nil);
Qry.AdsConnection := Conn;
Qry.SQL.Add('INSERT INTO SOMETABLE (COL1, COL2, COL3)');
Qry.SQL.Add('VALUES (:COL1, :COL2, :COL3)');
while not OtherTable.Eof do
begin
Qry.ParamByName('COL1').AsInteger := OtherTable.FieldByName('COL1').AsInteger;
Qry.ParamByName('COL2').AsString := OtherTable.FieldByName('COL2').AsString;
Qry.ParamByName('COL3').AsDateTime := OtherTable.FieldByName('COL3').AsDateTime;
Qry.ExecSQL;
Qry.Close;
OtherTable.Next;
end;
// Free query
Conn.Close;
// Free connection.