![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: IBDac
Frage zu Firebird Blob und Image
Hallo,
ich möchte gerne ein Image in Firebird als Blob einfügen. Die Frage ist nur wie?
Delphi-Quellcode:
Muss ich x.AsBlob verwenden, oder x.AsIbBlob? Was mache ich, wenn ich das Feld (Blob := '')
ContactsQuery.ParamByName('P33').AsBlob := main.Image3.????
zurücksetzen möchte? Viele Grüße ... |
Re: Frage zu Firebird Blob und Image
|
Re: Frage zu Firebird Blob und Image
Hi,
danke für den Link. Hatte dann wohl das falsche Stichwort für die Suche. Viele Grüße... |
Re: Frage zu Firebird Blob und Image
Hi,
muss ich da noch etwas beachten? Folgender Code wirft eine Exception:
Delphi-Quellcode:
Viele Grüße ...
if main.Image3 <> nil then
begin s := TMemoryStream.Create; main.Image3.Picture.Graphic.SaveToStream(s); ContactsQuery.ParamByName('P33').LoadFromStream(s, TBlobType(0)); end; ContactsQuery.ExecSQL; // Edit: Gespeichert wird ein JPEG. Muss ich das erst umwandeln? |
Re: Frage zu Firebird Blob und Image
Moin, da fallen mir zwei Dinge auf:
Die Position im Stream muss auf 0 zurück gesetzt werden. Eventuell musst du dich vergewissern, dass Graphic.SaveToStream() auch wirklich im JPEG-Format schreibt.
Delphi-Quellcode:
Freundliche Grüße
type
TDemoForm = class(TForm) // ... SaveBtn: TButton; Image: TImage; Database: TIBDatabase; taDefault: TIBTransaction; Q: TIBQuery; // ... procedure SaveBtnClick(Sender: TObject); private photo: TJpegImage; // ... end; { --- } function ibSaveJpeg(q: TIBQuery; const paramName: string; jpeg: TJpegImage): Boolean; var s: TStream; begin s := TMemoryStream.Create; jpeg.SaveToStream(s); s.Position := 0; q.ParamByName(paramName).LoadFromStream(s, TBlobType(0)); end; procedure TDemoForm.SaveBtnClick(Sender: TObject); begin Q.SQL.Text := 'INSERT INTO contacts(id, photo) VALUES(123, :photo)'; ibSaveJpeg(Q, 'photo', photo); Q.ExecSQL; taDefault.CommitRetaining; end; |
Re: Frage zu Firebird Blob und Image
Hi,
habe den Code jetzt wie folgt geändert:
Delphi-Quellcode:
Bekomme jetzt die Exception 'Data type is not supported'? Das Feld in
if main.Image3 <> nil then
begin img := TJPEGImage.Create; img.Assign(main.Image3.Picture.Bitmap); s := TMemoryStream.Create; img.SaveToStream(s); s.Position := 0; ContactsQuery.ParamByName('P33').LoadFromStream(s, TBlobType(0)); FreeAndNil(img); end; ContactsQuery.ExecSQL; der Tabelle ist ein Binary-Blob, was doch richtig sein müsste, oder? Viele Grüße ... |
Re: Frage zu Firebird Blob und Image
Der Code sieht okay aus, auch wenn die Logik (IF-Bedingung, ExecSQL außerhalb) nicht ganz stimmt.
Die Fehlermeldung wird vom Server zurückgegeben. Meinen Code habe ich mit FireBird 1.5 getestet, der Zugriff erfolgt mit IBQuery. Welche Zugriffstechnik verwendest du? |
Re: Frage zu Firebird Blob und Image
Hi,
Zitat:
Zitat:
Viele Grüße ... |
Re: Frage zu Firebird Blob und Image
Mit IBDAC kenne ich mich leider nicht aus.
Zum Produkt gehören Demos, speziell eine namens BlobPictures. Vielleicht solltest du dir die mal ansehen. |
Re: Frage zu Firebird Blob und Image
Was für einen Typ (Sub_Type) hat das Feld in der Datenbank?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz