Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#8

AW: Firedac als JSON ohne Feldbezeichner exportieren

  Alt 23. Apr 2023, 22:58
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat