AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Welchen DB-Typ (FMX) zum verwalten von Filestreams verwenden?
Thema durchsuchen
Ansicht
Themen-Optionen

Welchen DB-Typ (FMX) zum verwalten von Filestreams verwenden?

Ein Thema von Harry Stahl · begonnen am 22. Jul 2022 · letzter Beitrag vom 25. Jul 2022
Antwort Antwort
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.534 Beiträge
 
Delphi 11 Alexandria
 
#1

Welchen DB-Typ (FMX) zum verwalten von Filestreams verwenden?

  Alt 22. Jul 2022, 16:00
Datenbank: Unbekannt • Version: 1 • Zugriff über: ?
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?

Geändert von Harry Stahl (22. Jul 2022 um 16:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 23. Jul 2022, 07:53
Moin...

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

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
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.

  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.534 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 23. Jul 2022, 11:21
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).

Geändert von Harry Stahl (23. Jul 2022 um 12:23 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 23. Jul 2022, 16:07
Hallöle...
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...
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. ...und nur das. Egal wie groß die Datenbank ist.
Miniaturansicht angehängter Grafiken
db_1.jpg   db_2.jpg   db_3.jpg   db_4.png  

Geändert von haentschman (23. Jul 2022 um 16:13 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 25. Jul 2022, 13:41
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.)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 25. Jul 2022, 21:10
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:45 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