Startseite ¦  was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews ¦  sonstiges
kylix ¦  tutorials ¦  online shop ¦  fotos ¦  Add&Win Gewinnspiel


Willkommen Gast. Bitte einloggen oder registrieren.
17.05.2012, 03:08:29
Übersicht Hilfe Suche Einloggen Registrieren

+  SwissDelphiCenter Forum
|-+  German Forums
| |-+  Datenbank Forum
| | |-+  JPegImage aus einem BlobFeld auslesen
« vorheriges nächstes »
Seiten: [1] Drucken
Autor Thema: JPegImage aus einem BlobFeld auslesen  (Gelesen 1368 mal)
gutro
Newbie
*
Offline Offline

Beiträge: 40


« am: 28.02.2008, 16:35:04 »

Ich habe Thumbnails in ein Blobfeld einer Interbase-Datenbank entsprechend des Programmiertips gespeichert

Code:
ms:=TMemoryStream.Create;
JPegImage.SaveToStream(ms);
with Quer1 do
Params[7].SetBlobData(ms.Memory, ms.Size);
Quer1.ExecSQL;

Es scheint geklappt zu haben, denn die Datenbank wächst.
Nun will ich das Jpegimage wieder auslesen. Das gelingt mir aber nicht. Folgende Versuche habe ich gestartet:

Aus der Delphi-Online-Hilfe:

Code:
Ms5 : TmemoryStream;
 Bl5 : TBlobstream;
Bl5 := TBlobStream.Create(DaMod.BilderTable.FieldByName('Bild') as TBlobField, bmRead);
Beim Compilieren läuft alles glatt. Wenn ich dann aber starte kommt Fehlermeldung: Ungültige TypUmwandlung

Ein weiterer Versuch:
Code:
DaMod.BilderTable.Fields[7] as TBlobField.SaveToStream(ms5)
Fehlermeldung: Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt

Code:
TBlobField(DaMod.BilderTable.Fields[7]).SaveToStream (ms5);
Keine Fehlermeldung. Aber Stream ist Leer

Wer kann mir einen Tipp geben, wie ich es doch noch hinkriege?


Gespeichert
Loïs Bégué
Global Moderator
Hero Member
*****
Offline Offline

Beiträge: 1718



WWW
« Antworten #1 am: 29.02.2008, 09:53:07 »

Erste Idee:
es gibt bei Interbase/Firebird verschiedene Blob-Typen.
Hast Du bei der Tabellen Definition den richtigen benutzt ?

Wichtiger:
Bl5 := TBlobStream.Create(DaMod.BilderTable.FieldByName('Bild'), bmRead);
dürfte besser (also ohne "as TBlobField") funktionnieren.

Zudem solltest Du u.U. die Felder der Tabelle "persistent" anlegen. So weiss ObjectPascal automatisch über das BlobFeld bescheid.

Mehr dazu hier:

"...eine Datei in einen TBlobStream speichern, daraus lesen?"
http://www.swissdelphicenter.ch/de/showcode.php?id=1271
Gespeichert

Prof.Y
Arpoon
gutro
Newbie
*
Offline Offline

Beiträge: 40


« Antworten #2 am: 02.03.2008, 13:51:51 »

Danke Lois!

Als erstes: Ich verwende den BlobTyp 0, der für binäre Daten vorgesehen ist.

Beim Compilieren kommtr nach wie vor an der Stelle:
Code:
Bl5 := TBlobStream.Create(DaMod.BilderTable.FieldByName('Bild'), bmRead);
die Compilerfehlermeldung:
 Inkompatible Typen: 'TBlobField' und 'TField'.
Nehme ich den Code aus dem Programmiertyp
Code:
bl5 := DaMod.BilderTable.CreateBlobStream(DaMod.BilderTable.FieldByName('Bild') as TBlobField, bmRead);
Dann lautet die Fehlermeldung:
Inkompatible Typen: 'TBlobStream' und 'TStream'.

Irgendwie wird nicht erkannt, das es ein Blobfeld ist.

Zitat
Zudem solltest Du u.U. die Felder der Tabelle "persistent" anlegen. So weiss ObjectPascal automatisch über das BlobFeld bescheid.
Wie mache ich das?
Gespeichert
Loïs Bégué
Global Moderator
Hero Member
*****
Offline Offline

Beiträge: 1718



WWW
« Antworten #3 am: 02.03.2008, 22:40:37 »

TDataset doppelklicken.
Dann erscheint ein Dialog für persistente Felder... zunächst leer. Dann rechte Maustaste...
Gespeichert

Prof.Y
Arpoon
Seiten: [1] Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS