Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   JSONArray in eine DataSet (https://www.delphipraxis.net/207553-jsonarray-eine-dataset.html)

Ykcim 7. Apr 2021 16:34

JSONArray in eine DataSet
 
Hallo Zusammen,

ich versuche gerade eine Clien-Server App mit dem xData zu generieren.

Ich rufe einen Service auf, der eine Datenbankabfrage ausführt und das Ergebnis als JSONArray zurückliefert. Die Daten kommen auch bei dem Client als JSONArray an. Jetzt möchte ich diese in ein DataSet packen und breche mir dabei die Ohren...

Das sind die Daten, wie sie im JSONArray (JSONArray.ToString) stehen:
'[ {"prop_id":1,"Einstellung":"Abs_name","Wert":"Must erfirmaGmbH","Kommentar":"Name des Absenders"},
{"prop_id":2,"Einstellung":"Abs_Adresse_1","Wert": "Musterstr. 4711","Kommentar":"Strasse des Absenders"},
{"prop_id":3,"Einstellung":"Abs_Adresse_2","Wert": "","Kommentar":"Adress-Zusatz"},
{"prop_id":4,"Einstellung":"Abs_PLZ","Wert":"08150 ","Kommentar":"Postleitzahl Absender"},
{"prop_id":5,"Einstellung":"Abs_Ort","Wert":"Muste rstadt","Kommentar":"Ort des Absenders"},
{"prop_id":6,"Einstellung":"WTime_Druck","Wert":"1 80","Kommentar":"Wartezeit "}]'

Ich wollte es erst mit dieser Zeile machen:
Delphi-Quellcode:
xWDS_Properties.SetJsonData(JSval);
Aber dieses Statement erwartet die Daten in Form eines JSValue

Und hier meine Fragen:
1. Wie würdet Ihre die Daten aus einem JSONArray in ein DataSet (xDataWebDataSet - könnte aber auch ein anderes sein)
2. Wie mache ich aus einem JSONArray ein JSValue?

Vielen Dank für die Unterstützung
Patrick

Rollo62 7. Apr 2021 16:40

AW: JSONArray in eine DataSet
 
Kommt drauf an was Du willst.
Permanent in einen Record speichern, als JSON ?
Oder die Daten als TDataSet zur Verfügung stellen ?

Ich nehme mal an Letzteres, dafür würde ich versuchen JSON in einen TFDMemTable zu konvertieren.

https://stackoverflow.com/questions/...to-tfdmemtable
http://delphi.org/2015/03/firedac-in...t-tfdmemtable/

Neumann 7. Apr 2021 17:43

AW: JSONArray in eine DataSet
 
Das ist eine Webcore-Anwendung, vermute ich mal. Wenn man einen XData-Service als Quelle nimmt, ist das XDataset soweit ich das sehe nicht der richtige Typ. WebClientdataset sollte funktionieren.

Ykcim 7. Apr 2021 21:05

AW: JSONArray in eine DataSet
 
Ich habe es tatsächlich über eine TFDMemTable gelöst. Ich habe mir seitens des Servers die Query in einen TStream gespeichert:
Delphi-Quellcode:
Query.Open;
      if Assigned(AStream) then begin
         Query.SaveToStream(AStream, sfJSON);
      end;
Den habe ich an den Client gegeben und im Client dann in die TFDMemTable geladen:
Delphi-Quellcode:
procedure TDB_Unit.Get_Propteries;
var  LClient: TxDataClient;
      LService: IDBService;
      LStream: TMemoryStream;

begin
   LClient := TXDataClient.Create;
   LStream := TMemoryStream.Create;
   Try
      LClient.Uri:= xData_Conect.URL;
      LService:= LClient.Service<IDBService>;
      LStream:=LService.Properties_Select as TMemoryStream;
      LStream.Position:=0;
      MTable_Properties.LoadFromStream(LStream, sfJSON);
   Finally
      LClient.Free;
      LStream.Free;
   end;
end;
Zu Test-Zwecken ein DataSource an die TFDMemTable gehängt und das Ergbenis in einem DBGrid angezeigt. Scheint zu funktionieren.

Jetzt muss ich mal gucken, was ich mit einer TFDMemTable im Gegensatz zu einer DataSet machen kann, denn damit habe ich noch nie gearbeitet.

Vielen Dank für die Unterstützung.

@Neumann Es ist keine Web-App, sondern eine VCL-App

Patrick

Rollo62 8. Apr 2021 08:14

AW: JSONArray in eine DataSet
 
Zitat:

Zitat von Ykcim (Beitrag 1486648)
Jetzt muss ich mal gucken, was ich mit einer TFDMemTable im Gegensatz zu einer DataSet machen kann ...

Alles und noch ein bischen mehr :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz