Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Welchen DB-Typ (FMX) zum verwalten von Filestreams verwenden? (https://www.delphipraxis.net/211062-welchen-db-typ-fmx-zum-verwalten-von-filestreams-verwenden.html)

Harry Stahl 22. Jul 2022 15:00

Datenbank: Unbekannt • Version: 1 • Zugriff über: ?

Welchen DB-Typ (FMX) zum verwalten von Filestreams verwenden?
 
Trotz aller guten Vorsätze habe ich es leider immer noch nicht geschafft, mich mal mit den mit Delphi mitgelieferten Datenbanken zu beschäftigen.

Evtl. gibt es jetzt aber einen Anlass dafür: Ich möchte mein Datenbank-Programm bzw. meine eigene Datenbanklösung (InMemory) dahingehend erweitern, dass ich nun auch binäre oder Text-Dateien in die Datenbank speichern kann.

Dafür will ich aber nicht mein eigenes Datenbankformat erweitern, sondern mit Hilfe eines kleinen Umwegs eine Delphi-Datenbank verwenden, wo ich die Dateien in Blob-Feldern als Filestreams speichere. Um nicht mehrere Datenbank-Dateien zu verwenden, würde ich der Einfachheit halber im ersten Blob-Feld halt meine eigene Datenbank speichern und in den anderen Blobfeldern halt die Dateien, die in die Datenbank übernommen werden sollen. Der User muss daher weiterhin nur mit einer "Datenbankdatei" umgehen.

Wenn ich also die so konstruierte Datenbankdatei öffnen will, öffne ich das erste Blobfeld, wo "meine" Datenkbank im eigenen Format gespeichert ist und lese diese und den Rest benötige ich nur, wenn ich externe Dateien hinzufügen oder bereits hinzugefügte Dateien ansehen möchte.

Bräuchte in der Delphi-Datenbank also nur 2 Felder: "Index" (indiziert), welche einen eindeutigen Bezeichner für die Datei enthält (der kommt aus "meiner" Datenbank) und "FileStream" was halt den Stream der Datei enthält.

Nun hat Delphi so viele unterstützte Datenbank-Typen, dass es wohl ziemlich lange dauern würde, herauszufinden, was ich brauche.

Daher hoffe ich hier auf einen Tipp:

* Meine Anwendung ist ein FMX-Programm und ich benötige Daher eine DB, die unter Windows, macos und Linux läuft.

* Die DB soll bei Bedarf mehrere 100 GB oder noch größer speichern können.

* Ferner soll keine Installation oder Einrichtung für die Datenbank erforderlich sein. Am liebsten wäre mir also, ich müsste lediglich ein oder 2 Komponenten in mein Programm einfügen und ich könnte dann dort die entsprechenden Dateien hinzufügen, bzw. abrufen oder löschen.

* Das alles muss möglich sein, ohne dass man eine extra Lizenz erwerben muss, wenn z.B. im Netzwerk mehrere Leute damit arbeiten (hinweis: Brauche keine Client-Server Datenbank, lokal reicht, denn meine Datenbank kann sowohl als Stand-Alone Lösung verwendet werden oder aber im Client-Server betrieb (dann verwaltet das Serverprogramm die Datei).

Was könnte hierfür also eine einfache Lösung sein?
Also welcher Datenbank-typ, z.B. FireDAC, SQLLite, etc.?
Welche Komponenten müsste ich dafür exakt verwenden?

haentschman 23. Jul 2022 06:53

AW: Welchen DB-Typ (FMX) zum verwalten von Filestreams verwenden?
 
Moin...8-)

Du wirst sehen, daß das hier ausartet. :P Ist wie bei Joghurt...jeder hat seinen Geschmack. :thumb:

Ich mache mal den Anfang:

Firebird...weil:
1. Meine Anwendung ist ein FMX-Programm und ich benötige Daher eine DB, die unter Windows, macos und Linux läuft. ...JA
2. Die DB soll bei Bedarf mehrere 100 GB oder noch größer speichern können. ...JA
3. Ferner soll keine Installation oder Einrichtung für die Datenbank erforderlich sein. ...embedded-JA, Multiuser mit seperatem Server-NEIN
4. Das alles muss möglich sein, ohne dass man eine extra Lizenz erwerben muss, wenn z.B. im Netzwerk mehrere Leute damit arbeiten ...JA
5. denn meine Datenbank kann sowohl als Stand-Alone Lösung verwendet werden oder aber im Client-Server betrieb (dann verwaltet das Serverprogramm die Datei)....JA

PS:
Zitat:

FireDAC, SQLLite
...das sind 2 paar Schuhe. FireDAC sind Zugriffskomponenten, SQLLite ist eine Datenbank :zwinker:
Zitat:

Welche Komponenten müsste ich dafür exakt verwenden?
FDConnection, FDQuery...für den Anfang
Zitat:

Was könnte hierfür also eine einfache Lösung sein?
...was du aber brauchst ist ein DB Admintool. z.B. https://dbeaver.io/

Empfehlung:
Nicht mit dem Produktivsystem üben. Eine kleine Awendung tut es auch bis du sicher bist. :thumb:

:wink:

Harry Stahl 23. Jul 2022 10:21

AW: Welchen DB-Typ (FMX) zum verwalten von Filestreams verwenden?
 
Herzlichen Dank für Deine Rückmeldung.

Warum brauche ich ein DB-Amin-Tool?

Ich hoffte es ging z.B. (vereinfachte Darstellung) lediglich so:

Delphi-Quellcode:

var
  db: TMyDBType;

procedure CreateDBAndFields (dbName: string);
var
  table: TMyTable;
  fldtxt, fldStream: TField;
begin
  db := TMyDBType.create (dbName);
  table := db.addtable ('FileList');
  fldtxt := table.addField ('Index', TypeText);
  fldStream := table.addField ('File', TypeStream);
  fldtxt.Indexed := true;
end;

function AddFile (table: TMyTable; fn: string): Boolean;
var
  Data: TmyRecord;
  ms: TMemoryStream; // oder Filestream
begin
  Data := table.addRecord;
  Data.FieldByName ('Index').text := fn);
  // create ms before;
  Data.FieldByName ('File').Stream := ms.loadfromfile (fn);
end;
 
BEGIN
  CreateDBAndFields (db, 'D:\myData.db');
  ...
  AddFile (db.TableByName ('FileList'), 'D:\ABitmap.bmp');
Gibt es in Delphi hierfür eine entsprechende Möglichkeit?
Delphi bietet ja 147 mitgelieferte Demos für Datenbanken, allerdings ist es nicht selten so, dass auf einer Form 10-20 unterschiedliche Datenbankkomponenten drauf sind (z.B. "C:\Users\Public\Documents\Embarcadero\Studio\22.0 \Samples\Object Pascal\Database\FireDAC\Samples\Comp Layer\TFDQuery\BlobStreams\BlobStreams.dproj"). Das überfordert mich ehrlich gesagt etwas, wenn ich eigentlich nur eine einfache, schnelle Lösung brauche. Bis ich die 20 Komponenten verstanden habe, habe ich alles schon selber programmiert.

Wenn Delphi da nichts (einfaches) bietet, ergänze ich halt eben doch mein eigenes Datenbank-Format um eine entsprechende Funktionalität (habe im Prinzip auch schon mal etwas ähnliches gemacht im Rahmen einer Bilddatenbank, wo man Bilder in einer Binärdatei hinzufügen, löschen, ersetzen und suchen kann).

haentschman 23. Jul 2022 15:07

AW: Welchen DB-Typ (FMX) zum verwalten von Filestreams verwenden?
 
Liste der Anhänge anzeigen (Anzahl: 4)
Hallöle...:P
Zitat:

Delphi bietet ja 147 mitgelieferte Demos für Datenbanken, allerdings ist es nicht selten so, dass auf einer Form 10-20 unterschiedliche Datenbankkomponenten drauf sind (z.B. "C:\Users\Public\Documents\Embarcadero\Studio\ 22.0 \Samples\Object Pascal\Database\FireDAC\Samples\Comp Layer\TFDQuery\BlobStreams\BlobStreams.dproj"). Das überfordert mich ehrlich gesagt etwas, wenn ich eigentlich nur eine einfache, schnelle Lösung brauche
Datenbank lernen ist keine schnelle Lösung. Da bist du falsch...:roll:
Zitat:

dass auf einer Form 10-20 unterschiedliche Datenbankkomponenten drauf sind
FDConnection, FDQuery reicht! 1 Query pro "Abfrage" dynamisch erzeugt.
Zitat:

habe ich alles schon selber programmiert.
...dann hast du noch nicht verstanden was ein Datenbankserver für Aufgaben hat...Integrität der Daten.
Dazu gehören:
* eindeutige Schlüssel
* Fremdschlüssel
* Indexe
* Trigger zur "Automatisierung"

Was man wissen muß:
* Normalisierung der Tabellen: https://de.wikipedia.org/wiki/Normal...ng_(Datenbank)
* SQL Injection: https://de.wikipedia.org/wiki/SQL-Injection
...etc.

Zitat:

Warum brauche ich ein DB-Amin-Tool?
Weil man das, was eine Datenbank bietet, nicht per Hand machen muß. (Bilder)
Delphi-Quellcode:
procedure CreateDBAndFields (dbName: string);
var
  table: TMyTable;
  fldtxt, fldStream: TField;
begin
  db := TMyDBType.create (dbName);
  table := db.addtable ('FileList');
  fldtxt := table.addField ('Index', TypeText);
  fldStream := table.addField ('File', TypeStream);
  fldtxt.Indexed := true;
end;
...klar würde das (prinzipiell) auch gehen. Aber warum? Die Datenbank Tabellen sind fertig! Warum muß man den Code permanent mitschleifen?

Die Datenbank verwaltet die Daten. Du als User mußt nicht wissen was wo gespeichert wird/ist! Im Code sagt man... gibt mir aus der Tabelle XY das Feld Namens YZ. In Millisekunden hat man das Ergebnis. :thumb: ...und nur das. Egal wie groß die Datenbank ist.

Rolf Frei 25. Jul 2022 12:41

AW: Welchen DB-Typ (FMX) zum verwalten von Filestreams verwenden?
 
Willst du eine einfache lokale DB oder einen vollwertige mit Multiuser C/S Zugriff? Im ersten Fall wäre SQLite sicher eine Option, kenne mich damit aber selber nicht aus und weiss nicht genau, was es da für Beschgränkungen gibt. Müsstest mal danach googlen. Interbase oder eine andere grosse DB scheinen mir für deine Zwecke massiv überdimmensioniert und kompliziert (Admin, Installation DB-Dienst/Demon, etc.)

TurboMagic 25. Jul 2022 20:10

AW: Welchen DB-Typ (FMX) zum verwalten von Filestreams verwenden?
 
Mal tatsächlich SQLite anschauen. Wenn das mit so vielen großen Blobs zurecht kommt ist der Vorteil, dass alles nötige mit eincompiliert wird.

Firebird wäre genauso kostenlos. Nutzt man die Embedded Variante muss man nix installieren aber ein paar Dateien mitliefern.

Ähnlich dürfte das mit dem bei Delphi beiliegenden IBLite sein.
Falls SQLite mit so großen Blobs nicht zurecht kommt, wäre evtl. IBLite eine Alternative.

Und ja, ein Management Tool ist hilfreich, gibt's oft auch kostenlose
Tools/Versionen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz