Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Delphi - TSQLQuery verlässt einen Prozess auf MySQL, auch nachdem er freigegeben wurde

Stellen Sie weder Ihre Verbindung noch Ihre Abfrage immer wieder neu her. Verwenden Sie Parameter für die Abfrage; Öffnen Sie die Verbindung einmal, füllen Sie die Parameter der Abfrage aus, führen Sie sie aus, schließen Sie die Abfrage (aber nicht die Verbindung), füllen Sie die Abfrageparameter erneut aus und führen Sie sie erneut aus.

Etwa so (unter Verwendung von Advantage Database Server, aber das Konzept ist dasselbe):

// 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.