AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Frage zu Firebird Blob und Image
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu Firebird Blob und Image

Offene Frage von "Grolle"
Ein Thema von Grolle · begonnen am 30. Jun 2008 · letzter Beitrag vom 16. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#1

Frage zu Firebird Blob und Image

  Alt 30. Jun 2008, 22:12
Datenbank: Firebird • Version: 2.1 • Zugriff über: IBDac
Hallo,

ich möchte gerne ein Image in Firebird als Blob einfügen. Die Frage ist nur wie?
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 ...

  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Frage zu Firebird Blob und Image

  Alt 30. Jun 2008, 22:27
Hallo Stefan,

hier wurde das Thema auch schon behandelt: klick

Grüße vom marabu
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Frage zu Firebird Blob und Image

  Alt 30. Jun 2008, 22:31
Hi,

danke für den Link. Hatte dann wohl das falsche Stichwort für die Suche.

Viele Grüße...

  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Frage zu Firebird Blob und Image

  Alt 30. Jun 2008, 23:11
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?

  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Frage zu Firebird Blob und Image

  Alt 1. Jul 2008, 08:29
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
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Frage zu Firebird Blob und Image

  Alt 1. Jul 2008, 10:09
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 ...

  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Frage zu Firebird Blob und Image

  Alt 1. Jul 2008, 16:02
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?
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Frage zu Firebird Blob und Image

  Alt 1. Jul 2008, 16:08
Hi,
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

Zitat von marabu:
Welche Zugriffstechnik verwendest du?
Ich benutze IBDac Version 2.20 und Firebird 2.1.


Viele Grüße ...

  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Frage zu Firebird Blob und Image

  Alt 1. Jul 2008, 16:34
Mit IBDAC kenne ich mich leider nicht aus.
Zum Produkt gehören Demos, speziell eine namens BlobPictures.
Vielleicht solltest du dir die mal ansehen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Frage zu Firebird Blob und Image

  Alt 1. Jul 2008, 16:37
Was für einen Typ (Sub_Type) hat das Feld in der Datenbank?
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 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