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;