Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Frage zu Firebird Blob und Image (https://www.delphipraxis.net/116502-frage-zu-firebird-blob-und-image.html)

Grolle 30. Jun 2008 22:12

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:
ContactsQuery.ParamByName('P33').AsBlob := main.Image3.????
Muss ich x.AsBlob verwenden, oder x.AsIbBlob? Was mache ich, wenn ich das Feld (Blob := '')
zurücksetzen möchte?

Viele Grüße ...

marabu 30. Jun 2008 22:27

Re: Frage zu Firebird Blob und Image
 
Hallo Stefan,

hier wurde das Thema auch schon behandelt: klick

Grüße vom marabu

Grolle 30. Jun 2008 22:31

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...

Grolle 30. Jun 2008 23:11

Re: Frage zu Firebird Blob und Image
 
Hi,

muss ich da noch etwas beachten? Folgender Code wirft eine Exception:
Delphi-Quellcode:
  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;
Viele Grüße ...

// Edit: Gespeichert wird ein JPEG. Muss ich das erst umwandeln?

marabu 1. Jul 2008 08:29

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:
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;
Freundliche Grüße

Grolle 1. Jul 2008 10:09

Re: Frage zu Firebird Blob und Image
 
Hi,

habe den Code jetzt wie folgt geändert:
Delphi-Quellcode:
  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;
Bekomme jetzt die Exception 'Data type is not supported'? Das Feld in
der Tabelle ist ein Binary-Blob, was doch richtig sein müsste, oder?

Viele Grüße ...

marabu 1. Jul 2008 16:02

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?

Grolle 1. Jul 2008 16:08

Re: Frage zu Firebird Blob und Image
 
Hi,
Zitat:

Zitat von marabu
Der Code sieht okay aus, auch wenn die Logik (IF-Bedingung, ExecSQL außerhalb) nicht ganz stimmt.

davor werden ja noch andere Werte übergeben, aber nen try-except muss da wohl noch rein :roll:

Zitat:

Zitat von marabu
Welche Zugriffstechnik verwendest du?

Ich benutze IBDac Version 2.20 und Firebird 2.1.


Viele Grüße ...

marabu 1. Jul 2008 16:34

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.

mkinzler 1. Jul 2008 16:37

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.
Seite 1 von 2  1 2      

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