AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TFDJSONDataSetsReader liefert immer das letzte DataSet
Thema durchsuchen
Ansicht
Themen-Optionen

TFDJSONDataSetsReader liefert immer das letzte DataSet

Ein Thema von Kostas · begonnen am 30. Jun 2015 · letzter Beitrag vom 1. Jul 2015
 
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.112 Beiträge
 
Delphi 12 Athens
 
#1

TFDJSONDataSetsReader liefert immer das letzte DataSet

  Alt 30. Jun 2015, 23:21
Hallo Zusammen,

vorab: ich suche keine Lösung sondern berichte über zwei Bugs die ich gefunden habe, zumindest empfinde ich es als Bug.


------------Problem 1----------------
Ich habe eine TFDQuery SELECT * FROM &TableNamen WHERE UEBERTRAGEN = 1 dessen Tabellenname per Makro übergeben wird.
Insgesamt sind es fünf Tabellen die in ein TFDJSONDataSets geschrieben werden.
Ich gehe also in einer Schleife durch. Dabei setze ich den Tabellennamen und schreibe die Daten in das TFDJSONDataSets
über die Methode: TFDJSONDataSetsWriter.ListAdd(ExportFDJSONDataSets, TableName, qry); Die drei Parameter sind:
-ExportFDJSONDataSets das ist das TFDJSONDataSets
-TableName den eindeutige Tabellennamen
-qry immer das gleiche TFDQuery welches die Daten der aktuellen Datei darstellt.

ACHTUNG: Das Problem ist, ich übergebe immer das gleiche Object "qry" eigentlich sollte das keine Problem sein, ist es jedoch.
Deutlich wird es wenn man sich anschaut was exportiert wird. Der Objectname "qry" wird als "Table Name" exportiert und nicht wie erwartet,
nach meiner Vorgabe über "TableName"
Code:
 <Table Name="qry" SourceName="KONTAKTE" SourceID="1" TabID="0" EnforceConstraints="False" MinimumCapacity="50">
Das hat zur Folge, beim schreiben der DataSets ins TFDJSONDataSets, überschreibt das letzte DataSet alle DataSets da sie den gleichen Namen haben "qry"
Somit sind alle fünf DataSets mit dem gleichen Inhalt!
LDataSet := TFDJSONDataSetsReader.GetListValueByName(FJSONDataSets, TableName); //Auslesen über den Namen LDataSet := TFDJSONDataSetsReader.GetListValue(FJSONDataSets, I); //Auslesen über den Index Wenn ich jedoch für jede Query ein eigene TFDQuery verwende die auch jeweils einen anderen Namen hat, funktioniert das Auslesen einwandfrei.


------------Problem 2----------------
Wenn das TFDJSONDataSets erzeugt und noch kein DataSet per "TFDJSONDataSetsWriter.ListAdd" geschrieben wurde,
würde ich erwarten dass   TFDJSONDataSetsReader.GetListCount(FJSONDataSets) 0 zurückgibt.
Das ist nicht so, es kommt eine Exception dass kein DataSet vorhanden ist.

Wenn man den Source anschaut ist es klar, AList.FDataSets ist nil! Eigentlich sollte hier die zwei or Bedingung weg und nil zurückgegeben werden.
Die aufrufende Methode prüft bereits auf nil dieser Methode und gibt richtigerweise auch als Result := 0; zurück.
Delphi-Quellcode:
class function TFDJSONDataSetsReaderBase.GetPairList(
  const AList: TFDJSONDataSetsBase): TPairList;
begin
  if (AList = nil) or (AList.FDataSets = nil) then
    raise EFDDataListError.Create(sCantReadNilList);
  Result := AList.FDataSets;

end;

------------Problem 3----------------
Der erzeugte JSON Text ist zu geschwätzig. Meine fünf Tabellen habe ich als CSV exportiert, erste Zeile die Feldbezeichner und danach die Records.
Alle fünf Tabellen zusammen ergeben etwa 1300 Bytes. Exportiere ich aus den fünf Tabellen das JSON in ein File hat dieses File 15000 Bytes.
Dabei ist auffällig, zu jedem Feld bei jedem Record werden die Feldbezeichner mit exportiert. Auch weitere Daten werden exportiert. Z.B.
für jedes Feld werden stolze 17 Eigenschaften exportiert. Somit ist die eigentliche Stärke von JSON ausgehebelt wie ich finde.

Code:
"RowList":[{"RowID":0,"Original":{"KONTAKTID":700002,"PERSONID":700002,"KONTAKTTYP":1,"KONTAKT":"11111111111","UEBERTRAGEN":true}}]}]
Als Beispiel habe ich einen Datensatz exportiert. Die Nutzdaten sind "700002, 700002, 1, '11111111111', true"
Ihr könnt das JSON anzeigen lassen z.B.: mit dem Viewer: http://codebeautify.org/jsonviewer


Gruß Kostas

[Edit] getestet mit Delphi XE7 und XE8 SP1
Angehängte Dateien
Dateityp: txt Source_KONTAKTE.txt (3,3 KB, 3x aufgerufen)
  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 16:06 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 by Thomas Breitkreuz