Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datei aus Datenbank auslesen (https://www.delphipraxis.net/88939-datei-aus-datenbank-auslesen.html)

hirnstroem 23. Mär 2007 11:09

Datenbank: Access • Zugriff über: ADO

Datei aus Datenbank auslesen
 
'loha Folks,

ich habe soeben eine Textdatei in einer Access Datenbank gespeichert und frage mich wie denn diese wieder ausgelesen wird -.-

Die Datei wurde in einem als OLE-Objekt definierten Feld gespeichert.

Die Datei möchte ich beim auslesen entweder in ein TIWFile-Objekt (IntraWeb) oder einen Stream einlesen, weiss aber nicht so wirklich wie.

Ich benötige also folgendes für eine Textdatei:

Delphi-Quellcode:
var
  imgReceived: TIWImage;
begin
  imgReceived.Picture.Assign((DataSet.FieldByName('Image') As TBlobField));
Grüsse
hirnstroem

Captnemo 23. Mär 2007 11:45

Re: Datei aus Datenbank auslesen
 
Hier mal ein Beispiel, wie ich formatierten Richtext in einer Tabelle ausgelesen habe.

Delphi-Quellcode:
     
      ms:=TMemoryStream.Create;
      (dm1.q_MainEdit.FieldByName('FormatArbeiten') as TBlobField).SaveToStream(ms);
      ms.Position:=0;
      frm_termin.RichEdit1.Lines.LoadFromStream(ms);
      ms.Free;
Geht natürlich umgekehrt auf die gleiche Weise. Ich denke mit einer AccessDB wird das wohl auch funzen.

hirnstroem 23. Mär 2007 12:06

Re: Datei aus Datenbank auslesen
 
Dankeschön Captnemo,

leider löst die von dir beschriebene Variante bei mir eine EAbstractError-Exception aus, weshalb auch immer. Der Code sieht wie folgt aus:

Delphi-Quellcode:
procedure InitBootload(Sender: TObject);
var
  BootloadStream: TStream;
begin
  BootloadStream := TStream.Create;
  UserSession.ADODataSet_Bootload.Open;
  (UserSession.ADODataSet_Bootload.FieldByName('DIBootloadFile') as TBlobField).SaveToStream(BootloadStream); // <- gibt den abstrakten Fehler
  ...
  BootloadStream.Free;
end;
Grüsse
hirnstroem

Captnemo 23. Mär 2007 12:18

Re: Datei aus Datenbank auslesen
 
Hab mal kurz in die Delphihilfe geschaut:

Zitat:

TStream ist eine abstrakte bzw, rein virtuelle (C++ Terminologie) Klasse. Erstellen Sie keine Instanzen von TStream. Dieser Typ enthält abstrakte bzw. virtuelle Methoden, die überschrieben werden müssen. Abgeleitete Stream-Objekte wie Speicher- und Datei-Streams, die für Stream-Operationen mit Komponenten eingesetzt werden, werden beim Einsatz der globalen Funktionen ReadComponentRes und WriteComponentRes automatisch erstellt. Wenn andere Arten von Informationen in den Stream gestellt werden sollen, wählen Sie eine abgeleitete Klasse, die den jeweiligen Daten- und Speicherbedarf erfüllt. Dazu gehören

TFileStream (zur Bearbeitung von Dateien)
TStringStream (zur Manipulation in-Speicherstrings)
TMemoryStream (zur Bearbeitung von Speicherpuffern)
TBlobStream (für die Arbeit mit BLOB-Feldern)
TWinSocketStream (für das Lesen und Schreiben über eine Socket-Verbindung)
TOleStream (für das Lesen und Schreiben über eine COM-Schnittstelle)
Wenn das richtig interpretiere, dann empfielt Borland hier dass man ein abgeleitetes Object verwenden. In deinem Falle vielleicht TMemoryStream, wie ich es auch gemacht habe.

Probier das doch mal aus.

Ich denke für eine TStream fehlt ja in deinem Quellcode die Information, wass denn mit den gelesenen Daten zu passieren hat. Sollen die in den Speicher? in ein OLE-Object? Oder was?
Und um sich mit sowas nicht rumzuschlagen, würde ich einfach das TMemoryStream benutzen. Oder gleich ein TFileStream, das mußt du mal ausprobieren. Bei einem TFileStream übergibst du ja einen Dateinamen. Dann weiß der Stream auch wohin mit den Daten.

Aber ich finde die TMemoryStream.SaveToFile hier einfacher....

hirnstroem 23. Mär 2007 12:31

Re: Datei aus Datenbank auslesen
 
Jetzt versteh' ich. In der Tat, mit TStream-Nachkommen funktioniert die Sache nun auch -.-

Vielen Dank für deine Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 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