Hi,
ich versuche mir Daten von einem
MySQL in einem Thread abzurufen.
Delphi-Quellcode:
var
q: TSDQuery;
lieferant: TLieferant;
begin
Try
q:=TSDQuery.Create(nil);
try
FLieferanten.Clear;
q.DatabaseName:='ERDB';
q.SQL.Text:='Select * from lieferanten where ((dttype & :dttype)>0) order by Lieferant';
q.Params.ParseSQL(q.SQL.Text, True);
q.Params.ParamValues['dttype']:=FLieferanten.DTType;
q.Active:=true;
while not q.Eof do
begin
Lieferant:=TLieferant.Create(FLieferanten.DTType);
Lieferant.Lfdnr:=q.FieldByName('Lfdnr').AsInteger;
Lieferant.Lieferantnr:=q.FieldByName('Lieferantnr').AsString;
Lieferant.Lieferantname:=Utf8ToAnsi(q.FieldByName('Lieferant').AsString);
Lieferant.DTType:=q.FieldByName('dttype').AsInteger;
LoadLieferant(Lieferant.Schlagworte, Lieferant.Lfdnr, FLieferanten.DTType);
FLieferanten.Add(Lieferant);
q.Next;
end;
q.Active:=False;
finally
q.Free;
end;
finally
Synchronize(procedure
begin
frm_ERNEu.ThreadFinished;
end);
self.Terminate;
end;
Problem ist jetzt, dass ich entweder "Error 1156: got packtes out of order" oder "Error 2013: Lost connection to
MySQL server during
query" bekomme. Danach ist dann auch die Connection weg.
Der Fehler tritt auf, wenn ich im Thread-Execute das
Query auf Active setze.
Andere Abfragen zu dem Server laufen problemlos, solange ich eben diesen Thread nicht starte.
Die gleiche
SQL-Abfrage erfüllt außerhalb des Thread's einwandfrei ihren Dienst.
Woran könnte das liegen?