title image


Smiley Re: Dateien per Blob-objekt in DB schreiben
Es sieht auf ersten Blick etwas komisch aus (vor allem wenn man bisher nur mit reinen SQL Anweisungen gearbeitet hat), ist aber ganz leicht.Um zu einem Blob-Feld zu verbinden, muß man einen BlobStream erzeugen, in den man dann entweder Daten schreiben oder daraus lesen kann.

Angenommen, deine Datenbanktabelle Files hat die folgenden Felder:

 

FileID (int)FileName (varchar)File (blob)</font>

 

Um Daten in eine Datei zu lesen, kann man so vorgehen, daß man einen TFileStream erzeugt, und diesen an eine Prozedur übergibt, die die Daten aus dem BlobStream in den FileStream schreibt:

 

procedure ReadFile(filename: string; stream: TStream);var  blobStream: TADOBlobStream;begin  query.SQL.Clear();  query.SQL.Add('SELECT FileID, FileName, File FROM Files WHERE FileName='''+ filename +'''');  query.Open();

  if (not dbquery.Eof) then begin    blobStream:=TADOBlobStream(query.CreateBlobStream(query.Fields[2], bmRead));    blobStream.SaveToStream(stream);    blobStream.Free();  end;

  query.Close();end;

Erklärung: mittels CreateBlobStream verbindet man den BlobStream mit dem richtigen Feld der Datenbank, daß dann wie ein Stream behandelt werden kann.

Anmerkungen: Die Prozedur geht davon aus, daß der im Parameter übergebene Stream vorher schon geöffnet wurde und nachher wieder geschlossen wird.Alternativ könnte man auch die Methoden blobStream.SaveToFile(dateiname) verwenden, die schreibt direkt in eine Datei. Obige Lösung ist aber flexibler (man kann z.B. auch in einen MemoryStream schreiben)

 

Daten zu schreiben, funktioniert ähnlich:

 

procedure WriteFile(filename: string; stream: TStream);var  blobStream: TADOBlobStream;begin  query.SQL.Clear();  query.SQL.Add('SELECT FileID, FileName, File FROM Files');  query.Open();

  query.Append();

 

  blobStream:=TADOBlobStream(query.CreateBLOBStream(dbquery.Fields[2], bmWrite));  blobStream.LoadFromStream(stream);  blobStream.Free();

 

  query.Post();

  query.Close();end;

Erklärung: wie oben, nur wird jetzt in den BlobStream geschrieben (beachte den Parameter bmWrite beim Erzeugen)Anmerkung: auch hier gibts eine Methode LoadFromFile(dateiname), die direkt aus einer Datei liest

Hoffe das hilft dir soweit mal! :-)

Viele Grüße,

Benjamin

 generiert mit sledit[1.02] by pumi .:sledit-info 



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: