AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Dataset austausch über JSON
Thema durchsuchen
Ansicht
Themen-Optionen

Dataset austausch über JSON

Ein Thema von fisipjm · begonnen am 18. Okt 2021 · letzter Beitrag vom 19. Okt 2021
Antwort Antwort
fisipjm
Online

Registriert seit: 28. Okt 2013
333 Beiträge
 
Delphi 12 Athens
 
#1

Dataset austausch über JSON

  Alt 18. Okt 2021, 12:19
Datenbank: MSSQL/Memtable • Version: xyz • Zugriff über: Firedac
Hi,

Ich habe das, hoffe ich mal, folgende verständnissproblem:

Eine Query (Ableitung von Dataset) hat die Funktion SaveAsStream mit Formatübergabe (in meinem Fall sfJSON).
Eine FDMemtable (Ableitung von Dataset) hat die Funktion LoadFromStream mit Formatübergabe (in meinem Fall sfJSON).

Wenn ich das so verwende, und in meiner Query Daten mit Umlauten drin sind funktioniert das LoadFromStream nicht mehr. Was mach ich falsch? Ich bin davon ausgegangen die Komponenten sind in der Lage den Formatierungsgedöns selbst zu machen. Leider kommt die Meldung das FDSTAN das JSON nicht lesen kann. Immer bei den Umlauten. Irgendwelche Tipps? ich find nix
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Dataset austausch über JSON

  Alt 18. Okt 2021, 13:09
Das ist mir zu viel Spekulation. Hast du ein konkretes Beispiel?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
fisipjm
Online

Registriert seit: 28. Okt 2013
333 Beiträge
 
Delphi 12 Athens
 
#3

AW: Dataset austausch über JSON

  Alt 18. Okt 2021, 14:15
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
var
  lStringStream: TstringStream;
begin
  lstringStream := tstringstream.create;
  try
    FDMemTable1.SaveToStream(lStringStream,sfJSON);
    FDMemTable2.LoadFromStream(lStringStream,sfJSON);
  finally
    lStringStream.free;
  end;

end;
Beispielprojekt im Anhang, hab beim erstellen bemerkt, dass es scheinbar nicht an denUmlauten liegt, die Frage bleibt im Grundsatz aber die gleiche. Warum tut es nicht?
Angehängte Dateien
Dateityp: zip DemoFuerDelphi.zip (447,5 KB, 6x aufgerufen)

Geändert von fisipjm (18. Okt 2021 um 14:41 Uhr)
  Mit Zitat antworten Zitat
tamasker

Registriert seit: 16. Mai 2017
3 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Dataset austausch über JSON

  Alt 18. Okt 2021, 14:55
Hängt vermutlich mit der Positionierung im Stream zusammen.

Versuche doch mal die Position zurückzusetzen:

Delphi-Quellcode:
FDMemTable1.SaveToStream(lStringStream,sfJSON);
[B]lstringStream.Position := 0;[/B]
FDMemTable2.LoadFromStream(lStringStream,sfJSON);
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Dataset austausch über JSON

  Alt 18. Okt 2021, 15:17
Der Hinweis mit der Position ist richtig. Das trifft aber auf dein eigentliches Problem nicht zu. Aus deiner Frage bei StackOverflow sind ja zwei Code-Snippets zu entnehmen
Delphi-Quellcode:
var lStream: TStringStream := TStringStream.create;

    FDQuery.SaveToStream(lStream,sfJSON);
    AResponse.Body.SetStream(lStream,'application/json' ,True);
Delphi-Quellcode:
lstrstream: TStringStream := TStringStream.create(EMSBackendEndpoint.Response.Content);
 aMemtable.LoadFromStream(lstrstream, sfJSON);
Der zu ladende Stream sollte also schon am Anfang stehen.

Somit geht das Testprojekt leider am eigentlichen Problem vorbei.

Kannst du denn den String-Inhalt nach SaveToStream mal zeigen?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
fisipjm
Online

Registriert seit: 28. Okt 2013
333 Beiträge
 
Delphi 12 Athens
 
#6

AW: Dataset austausch über JSON

  Alt 18. Okt 2021, 15:51
Der Hinweis mit der Position ist richtig. Das trifft aber auf dein eigentliches Problem nicht zu. Aus deiner Frage bei StackOverflow sind ja zwei Code-Snippets zu entnehmen
Hallo Uwe, Messerscharf kombiniert


Kannst du denn den String-Inhalt nach SaveToStream mal zeigen?
Das ist der Inhalt von einem Datensatz der definitiv Probleme macht, noch auf der Serverseite direkt nach dem SaveStream über folgenden Aufruf in eine JSon Datei gedumpt.

 tfile.WriteAllText(tpath.GetTempPath+'OutputNachSaveStream.json',Result.DataString)
Code:
..."BEZEICHNUNG":"B, Grünau","STRASSE":"",...
Das seltsame ist, in der IDE kann ich die Datei ohne muken in die Memtable laden, nur wenn ich Sie mir über den Stream vom Rersponse des BackendEndpoint hole bekomm ich die Meldung das es an Stelle 6666 knallt. Teuflisch oder

PS: JSON nachträglich gekürzt wegen irrelevanten Informationen.

Geändert von fisipjm (18. Okt 2021 um 16:29 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 06:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz