[Closed] TMemdataset vs TBufDataset

Rund um die LCL und andere Komponenten
Antworten
charlytango
Beiträge: 333
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.0 fixes FPC 3.2 fixes
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

[Closed] TMemdataset vs TBufDataset

Beitrag von charlytango »

Hi.

Wenns dem Esel (also mir) zu bunt wird muss er aufs Eis ;)
Hab mir ein langgehegtes Projekt für Applikationseinstellungen hergenommen das über die Jahre prokrastiniert wurde. Basiskonzept steht aber die Details ...

Ich speichere Einstellungsdaten wahlweise (testweise) in einem TMemdataset bzw einem TBufDataset. Beides scheint Vor und Nachteile zu haben.

Erstmal: wie lösche ich in einem TBufDataset den Tabelleninhalt ohne die Tabellenstruktur gleich mit zu löschen -- oder geht das nicht anders?

Und dann bietet TBufDataset unterschiedliche Möglichkeiten den Tabelleninhalt zu speichern.
Zumindest gibt es eine Wahlmöglichkeit

Code: Alles auswählen

TDataPacketFormat = (dfBinary,dfXML,dfXMLUTF8,dfAny,dfDefault);
//zB:
TBufDataset.SaveToFile(filepath+'001.bin',dfBinary);
dfBinary klappt -- alle anderen Varianten scheinen nicht hinterlegt zu sein ?
denn das löst eine Exception aus:

Code: Alles auswählen

There is no TDatapacketReaderClass registered for this kind of data-stream
Oder finde ich es einfach nur nicht? Auch andere Möglichkeiten eine Tabelle als XML oder JSON in eine Datei zu speichern wären willkommen.



THX
Zuletzt geändert von charlytango am Di 27. Apr 2021, 16:25, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 8639
Registriert: Mo 11. Sep 2006, 19:01

Re: TMemdataset vs TBufDataset

Beitrag von theo »

Für XML musst du vllt. noch XMLDatapacketReader in die uses aufnhemen.

Allgemein verstehe ich aber nicht, was du machen willst.. Warum kein IniFile?

charlytango
Beiträge: 333
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.0 fixes FPC 3.2 fixes
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

Re: TMemdataset vs TBufDataset

Beitrag von charlytango »

theo hat geschrieben:
Sa 24. Apr 2021, 09:43
Allgemein verstehe ich aber nicht, was du machen willst.. Warum kein IniFile?
Screen1.png
Screen1.png (79.3 KiB) 170 mal betrachtet
Ich möchte ...
  • anfallende Einstellungen für kleine und größere Applikationen nicht immer neu pinseln müssen.
  • eine ansprechende Oberfläche um sie zu erstellen und über mehrere Projekte hinweg zu verwalten und bei Bedarf nur 'zusammenzuklicken'
  • eine hübsche Oberflächefür den Benutzer in der Applikation um sich die Optionen einzustellen
  • ein zentrales SingletonObjekt das die Einstellung-Daten in der Applikation zur Verfügung stellt.
  • je nach Anforderung oder Gusto des Programmierers unterschiedliche Formate zur Verfügung stellen um Daten und Einstellungen zu speichern und auch wieder zu verwenden
  • mit Lazaruskomponenten auskommen um nicht von Drittanbietern abhängig zu sein.
  • alles soll aus den Daten in einer Tabelle generen ohne besondere Eingriffe des Programmierers -- wiewohl ihm aber sämtliche Eingriffsmöglichkeiten offen stehen
Die Daten werden während der Laufzeit in einer Memorytabelle gehalten -- entweder TMemdataset vs TBufDataset -- oder etwas besseres das ich unter Lazarus aber nicht kenne. Früher unter Delphi wars mal kbMemTable. Leider hatte kbMemTable etwas mehr Funktionsumfang was Abfragen, Index und Suche betrifft.


Hier mal eine Idee für eine mögliche Formatauswahl.
Derzeit teste ich ohnedies mit INI-Dateien.
Screen2.png
Screen2.png (11.33 KiB) 170 mal betrachtet
Bin für Ideen oder Anforderungen (und Hilfe ;) ) durchaus offen, denn vielleicht kanns ja jemand brauchen.

Ich hatte nur entdeckt dass TBufDataset eine Read/Write Funktion mit mehreren Formaten hat und wenn es das schon gibt würde es eher für die verwendung dieser Klasse sprechen

aro
Beiträge: 98
Registriert: Di 26. Jul 2011, 19:58
OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
CPU-Target: 64Bit

Re: TMemdataset vs TBufDataset

Beitrag von aro »

Hallo,

Alle Deine möglichen Dateitypen speichern letztendlich die Daten in Textform und das ist nicht effizient. Beim Programmstart müssen die Texte erst in vernünftige Datentypen umwandeln.

In Deinem Programm deklarierst Du einen Record, der alle benötigten Elemente im richtigen Datenformat enthält. Den Record speicherst Du in einer Datei.
Beim Programmstart wird der Record einmal gelesen und alle Daten stehen während des gesamten Programms sofort und ohne Umwandlung zur Verfügung. Bei Veränderungen kannst Du die Daten vor dem Speichern auf Plausibilität prüfen und kein Spielmatz kann einfach mal mit einem Texteditor deine Einstellungen ändern und sich anschließend über Programmfehler beschweren.

Antworten