Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

TClientdataset vs. TFDMemTable vs. TFDQuery

  Alt 20. Apr 2017, 12:27
Datenbank: ?/MySQL • Version: 5.xx • Zugriff über: egal/Firedac
Hi zusammen

Im Moment bastle ich an einem Testprogramm, mit dem ich die Arbeit mit den im Titel genannten Komponenten austesten möchte. Noch bin ich allerdings auf der Suche nach entsprechenden Forenbeiträgen, die mir meine Fragen (hoffentlich) beantworten können und habe desshalb bislang nur wenig wirklich umgesetzt.
Da ich mit FireDac auf MySQL arbeite, war mein erster Gedanke der an TFDMemtable. Um mir das Prinzip zu verdeutlichen, habe ich trotzdem mal das Tutorial zu MyBase auf Delphi-Treff nachgebaut.
Doch erstmal zur Struktur, wobei es eigentlich egal ist, welche Komponente ich verwende:
Delphi-Quellcode:
procedure TDMLClientTest.FileQueryLoad;
begin
  FileQuery.FieldDefs.Add('id', ftAutoinc);
  FileQuery.FieldDefs.Add('fk', ftInteger);
  FileQuery.FieldDefs.Add('Name', ftString);
  FileQuery.FieldDefs.Add('Bitmap', ftBlob);
  FileQuery.FieldDefs.Add('NEF', ftBlob);
end;
Der Procedurname ist selbst auch noch nicht in Stein gemeisselt. Passieren soll im Anschluss an obige Zeilen folgendes:
  • Die Prozedur iteriert durch eine Pfadliste, die die Dateinamen meiner NEF-Dateien enthält.
  • Pro Listitem wird die Nefdatei in eine entsprechende Variable geladen.
  • Daraus wird eine Bitmap erstellt.
Nachdem die Pfadliste komplett durchlaufen ist, wird das ganze in eine Datei gespeichert, und gut ist - hoffentlich...
Knackpunkt könnte sein: Die NEF-Dateien sind zwischen 10 und 24 Megabite gross; daraus ertellte Bitmaps sind durchschnitlich dreimal grösser. Das ergibt einen (Arbeits-)Speicherbedarf von knappen 12GB - installiert habe ich deren 8GB...
Ein weiterer Knackpunkt könnte sein, dass das Query gar nicht in der Lage ist, einen Datensatz per SQL in sich selbst zu Speichern...

Auf die Idee, kein TFDMemtable, sondern nur das Query zu verwenden, brachte mich die Erkenntnis, dass TFDMemtable die Möglichkeit, sich selbst in eine Datei zu speichern, von TDataset erbt. Und da das Query dies auch erbt und ich eine Memorytable nicht wirklich brauche - wieso also sollte ich nicht direkt das Query verwenden?

Wie ich oben bereits erwähnt habe, hatte ich mal einen Test mit TClientdataset geschrieben, und von daher stellt sich mir die Frage: wieso nicht gleich das verwenden?
Ein Autoinc-Feld könnte da ein 'Problem' sein.

Was auch immer ich schlussendlich verwende: Es dient dazu,die NEF- und BMP-Bilder nicht in der eigentlichen Datenbank abzulegen, sondern in externen 'Tabellendateien', die auf beliebigen, auch externen Laufwerken, gespeichert werden sollen.

Was würdet ihr verwenden? Was spricht für wen? Was spricht gegen wen?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat