AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken DataSnap ein TFDJSONDataSets als TJSONObject übertragen
Thema durchsuchen
Ansicht
Themen-Optionen

DataSnap ein TFDJSONDataSets als TJSONObject übertragen

Ein Thema von Kostas · begonnen am 25. Mär 2015 · letzter Beitrag vom 26. Mär 2015
 
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.063 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

DataSnap ein TFDJSONDataSets als TJSONObject übertragen

  Alt 25. Mär 2015, 10:40
Datenbank: Firebird • Version: 2.5 • Zugriff über: DataSnap
Hallo Zusammen,

sorry für den unglückliche Titel.

Ich habe einen DataSnap Server. Mittels FireDac wird ein DataSet als TFDJSONDataSets
bereitgestellt. Ein Mobile RESTClient ruft das DataSet ab und befüllt damit eine TFDMemTable.
Das funktioniert einwandfrei und sehr stabil.

Die Kommunikation läuft über HTTP Port 8080. Ich versuche den Server zu erweitern so dass ich die gleiche
DataSets konsumieren kann diesmal über TCP/IP Port 211. Soweit ich es richtig verstanden habe, kann ein
TFDJSONDataSets nur über TDSRestConnection transportiert werden und nicht über eine TSQLConnection.
Deshalb versuche ich gerade TFDJSONDataSets umzuwandeln in ein TJSONObject um es über TSQLConnection
zu transportieren. Ein reines TJSONObject hätte auch den Vorteil dass ich es als Log in Klartext zwischenspeichern könnte!


Der Client bekommt beim abrufen eine Fehlermeldung:
Im Projekt ist eine Exception der Klasse TDBXError mit der Meldung 'Exception: '{' found:
',' at Position: 23
{"result":[{"rows":[0]},{"data":[12,#192*Connection]}]' aufgetreten.



So gehe ich vor:

Delphi-Quellcode:
//Der Server exportier die Query als TFDJSONDataSets
function TdmDALZMI.GetBau(BauNr:integer): TFDJSONDataSets;
begin
  qrGetBau.Active := False;
  qrGetBau.Params[0].Value := BauNr;

  Result := TFDJSONDataSets.Create;
  TFDJSONDataSetsWriter.ListAdd(Result, qrGetBau);
end;

//Der Server gibt die gleiche Query als TJSONObject aus.
function TdmDALZMI.GetBauJSON(BauNr:integer): TJSONObject;
var
  LDataSets: TFDJSONDataSets;
begin
  LDataSets := GetBau(BauNr);
  try
    Result := TJSONObject.Create;
    TFDJSONInterceptor.DataSetsToJSONObject(LDataSets, Result); <<<<<<<<<< Ist das hier richtig?
  finally
    LDataSets.Free;
  end;
end;


//Der Client ruft das DataSet als TJSONObject ab und wandelt es in ein TFDJSONDataSets um
procedure TdmZMI.GetBauJSON(BauNr:integer);
var
  LDataSetList: TFDJSONDataSets;
  LJSONObject: TJSONObject;
  LZMIClient: TdmServerMethodsZMIClient;

begin
  LZMIClient := TdmServerMethodsZMIClient.Create(CMClientModule.CMCSQLConnection.DBXConnection);
  try
    LJSONObject := LZMIClient.ZMI_GetBauJSON(BauNr); <<<<<<<<<< Fehlermeldung an dieser Stelle
    TFDJSONInterceptor.JSONObjectToDataSets(LJSONObject,LDataSetList);
  finally
    LZMIClient.Free;
  end;

  UpdateMemTable(mtBau, LDataSetList);
  mtBau.Open;
end;

//Der Client befüllt aus dem TFDJSONDataSets eine TFDMemTable
procedure TdmZMI.UpdateMemTable(const aMemTable:TFDMemTable; const ADataSetList: TFDJSONDataSets);
begin
  aMemTable.Active := False;
  Assert(TFDJSONDataSetsReader.GetListCount(ADataSetList) = 1);
  aMemTable.AppendData(TFDJSONDataSetsReader.GetListValue
    (ADataSetList, 0));

end;
Hat jemand eine Idee wo denn das Problem sein könnte oder gibt es eine einfachere Art eine
FireDac Query als TJSONObject an den Client über TCP(nicht HTTP) zu übertragen und dort
auf einfache weise ebenfalls mit FireDac zu konsumieren?


Herzlichen Dank für die Hilfe.
Gruß Kostas

Geändert von Kostas (25. Mär 2015 um 11:37 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 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