Einzelnen Beitrag anzeigen

Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

Query im Thread mit DataSet aus MainThread schlägt fehl

  Alt 5. Nov 2015, 13:54
Datenbank: MySQL • Version: 5.6 • Zugriff über: SQLDirect
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?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat