Không tạo lại kết nối của bạn nhiều lần, cũng như truy vấn của bạn. Sử dụng các tham số cho truy vấn; mở kết nối một lần, điền các tham số của truy vấn, thực thi nó, đóng truy vấn (nhưng không phải kết nối), điền lại các tham số truy vấn và thực thi lại.
Một cái gì đó như thế này (sử dụng Máy chủ cơ sở dữ liệu Advantage, nhưng khái niệm giống nhau):
// 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.