Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TFDJSONDataSetsReader liefert immer das letzte DataSet

  Alt 1. Jul 2015, 18:26
Sorgen macht mir deine Aussage dass in späteren Version das JSON? String nicht kompatibel sein könnte
allerdings war hier die Rede vom binary Format. In meinem Fall werden die JSON String in eine DB als Text
abgelegt. Der Anwender kann irgendwann auch nach einem Jahr das Paket anfordern. Dabei wird der JSON Text
in eine FDMemTable geschrieben und verarbeitet.

Weil es wichtig ist, wie wahrscheinlich könnte es sein dass der gespeicherte JSON Text nicht in eine FDMemTable
geschrieben werden kann?
Die Implementierung bei SaveToStream und LoadFromStream ist innerhalb der jeweiligen Objekte untergebracht. Dabei werden beim Save im Wesentlichen die Objekteigenschaften geschrieben, die vom Default abweichen (ähnlich wie bei einer DFM-Datei). Beim Load wird dieselbe Reihenfolge der Eigenschaften verwendet, wobei da halt geprüft wird, ob das erwartete Property tatsächlich im Storage an dieser Stelle drin steht; falls nicht, wird der Defaultwert verwendet. Solange die Reihenfolge und Typen der Eigenschaften im Storage nicht geändert wird, sollte ein älteres Storageformat somit lesbar sein.

Ergänzend wird auch eine StreamVersion im Storage verwaltet, die als Konstante im FireDAC hinterlegt ist. Wenn das konsequent berücksichtigt wird (von EMBA), ist zumindest eine Abwärtskompatibilität (neuere FireDAC können ältere Storages lesen) gegeben. Umgekehrt ist das mit Sicherheit nicht so. In der Vergangenheit (AnyDAC) war das zumindest schon mal ein Problem.

Für dein Speicherproblem sind Probleme dieser Art wohl unwahrscheinlich, wenn auch nicht ausgeschlossen. Es ist ja durchaus möglich, daß der Support sehr alter Formate irgendwann entfernt wird (muss ja alles gepflegt werden). Natürlich sind auch Fehler bei der Interpretation möglich. Es ist sehr unwahrscheinlich, daß der Import älterer Formate durch ausreichend Tests abgedeckt ist. Willst du auf Nummer-Sicher gehen und es kommt dir wirklich nur auf die enthaltenen Daten an, dann wäre ein reiner Text-Export/Import á la CSV wohl die bessere Wahl (KISS, selbst wenn die Implementierung dadurch komlexer wird).

Was sicher problematisch wird, ist eine Kommunikation zwischen Client und Server mit unterschiedlichen Stream-Formaten. Für den Fall, daß XE8+ ein neues Stream-Format einführt, dann müssen eventuell sowohl der Server als auch alle Clients mit derselben Version compiliert werden. Sonst kann zumindest einer vielleicht das Stream-Format des anderen nicht lesen. Das kann bei vielen Mobile-Clients, die irgendwo unkontrolliert in der Weltgeschichte rumschwirren schon eine anspruchsvolle Aufgabe werden.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat