Autor Beitrag
lilith
Hält's aus hier
Beiträge: 14

Win 2000

BeitragVerfasst: Mi 05.04.06 10:34 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Do 06.04.06 09:52 
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 www.delphitutorials....obs-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

ausblenden 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