da ich innerhalb des anonymen Threads auf das FD Object FD.CreateQuery('');
nicht zugreifen kann.
Um mit der
Query im Thread zu arbeiten, brauchst du eine multi-thread fähige Umgebung mit mindestens einer pooled Connection-Definition (FDManager.AddConnectionDef). Dann könntest du folgende Methode im Thread ausführen:
Delphi-Quellcode:
procedure WritePersonen(const AFileName: string);
begin
var conn := TFDConnection.Create(nil);
try
conn.ConnectionDefName := 'MyPooledConnectionDefName'; // oder wie die eben heißt
var qry := TFDQuery.Create(nil);
try
qry.Connection := conn;
qry.Open('SELECT * FROM PERSONEN');
var writer := TJsonTextWriter.Create(TStreamWriter.Create(AFileName, True, TEncoding.UTF8), True);
try
writer.WriteStartArray;
while not qry.Eof do begin
writer.WriteStartArray;
writer.WriteValue(qry.FieldByName('PERSONID').AsLargeInt);
writer.WriteValue(qry.FieldByName('NAMEN').AsString);
writer.WriteValue(qry.FieldByName('TITEL').AsString);
writer.WriteValue(qry.FieldByName('VORNAME').AsString);
writer.WriteValue(qry.FieldByName('GEBURTSDATUM').AsString);
writer.WriteValue(qry.FieldByName('PERSONALNR').AsString);
writer.WriteValue(qry.FieldByName('EINTRITTJAHR').AsInteger);
writer.WriteValue(qry.FieldByName('FACHNR').AsLargeInt);
writer.WriteValue(qry.FieldByName('FACH').AsString);
writer.WriteEndArray;
qry.Next;
end;
writer.WriteEndArray;
finally
writer.Free;
end;
finally
qry.Free;
end;
finally
conn.Free;
end;
end;
Das habe ich jetzt umgesetzt und funktioniert einwandfrei. Der Gesamte Ablauf dauert 1.5min in einem Anonymous Thread das ist perfekt.
Den TJsonTextWriter kannte ich bisher auch nicht, ist viel eleganter wie mein Weg.
Vielen herzlichen Dank Uwe, ich weis das sehr zu schätzen. Du hast mir persönlich so oft geholfen, du bist wirklich eine große Bereicherung für das Forum. Von deinem Kaliber gibt es noch weitere die ich sehr Schätze wie z.B. himitsu um nur einen von vielen weiteren zu nennen.
Gruß Kostas