Entwickler-Ecke

Datenbanken - Blob in einer Firebirddatenbank speichern


lilith - Mi 05.04.06 10:34
Titel: Blob in einer Firebirddatenbank speichern
Hallo,

ich möchte eine Datei und dazu ein paar Strings in der Datenbank speichern. Für den Zugriff auf die Firebirddatenbank benutze ich FibPlus. Mit folgendem Quelltext füge ich die Daten in die Datenbank ein:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
    fibTransaction.StartTransaction;

    fibQuery.SQL.Clear;
    fibQuery.SQL.Text := 'INSERT INTO dmtTable VALUES ('
                         + NewDocumentDmtBezeichnung
                         + ', '
                         + NewDocumentDmtBeschreibung
                         + ', '
                         + NewDocumentDmtKategorie
                         + ', '
                         + NewDocumentDmtDate
                         + ', '
                         + NewDocumentDmtImage //BLOBFeld
                         + ')'
    fibQuery.ExecQuery;

    while not fibQuery.Eof do
    begin
      fibQuery.Next;
    end;

    fibQuery.Close;
    fibTransaction.Commit;


Zur Erklärung:
Bis auf das BLOB Feld sind alle anderen Felder Strings. Leider funktioniert das so nicht? Was mache ich falsch?

Greez


Lemmy - Do 06.04.06 09:52
Titel: Re: Blob in einer Firebirddatenbank speichern
user profile iconlilith hat folgendes geschrieben:

Zur Erklärung:
Bis auf das BLOB Feld sind alle anderen Felder Strings. Leider funktioniert das so nicht? Was mache ich falsch?


Du liest die Tutorials nicht, die dir andere empfehlen!!!

[zitat http://www.delphitutorials.de/datenbank-tutorials/blobs-in-ib-fb-2.html]
Um sontige beliebige Dateien in Blobs zu speichern verwendet Ihr die Datenbankfelder. Macht einen Rechten Mausklick auf die IBDataSet und wählt im Popupmenü den Eintrag Feldeditor. Im Feldeditor macht ihr wieder einen Rechtsklick und wählt "Alle Felder hinzufügen" aus. Nun erscheinen alle Datenbankfelder im Editor. Diese könnt ihr wie folgt ansprechen:
"Name der IBDataSet""Name des Feldnamens"

in unserem Beispielprojekt also
IBDataSet1BINARYBLOB

Dieses Objekt hat nun ein paar Methoden, die das Leben etwas einfacher machen, u.a. LoadFromFile und SaveToFile. Mit diesen beiden Methoden lassen sich beliebige Dateien in einem Blob schreiben und auch wieder auslesen. Beim Auslesen und Abspeichern auf der Festplatte müsst ihr allerdings darauf achten, dass ihr die Datei mit der richtigen Extension abspeichert! Also nicht eine Word-Doc als Excel-Datei abspeichern.
[/zitat]

Wenn Du nicht mit persistenten Datenbankfeldern arbeiten willst, dann kannst Du noch über


Delphi-Quelltext
1:
 TBlobField(ADOTable1.Fields.Fields[1]).LoadFromFile('');                    


Daten schreiben und lesen. D.h. Du machst ganz normal Deinen Insert OHNE das Blob, holst den Datensatz dann nochmal in einer Query/Table her und bearbeitest das Blobfeld über die Feldmethoden.

Blobs können nicht direkt per SQL bearbeitet werden. Für Textfelder soll es entsprechende UDFs geben, wobei ich aber bisher nichts gutes über die Bearbeitung von Blobs über UDFs gelesen habe.

Lemmy