Entwickler-Ecke

Datenbanken - Bilder landen und Speichern aus Datenbank


Siggus19 - Di 08.04.03 12:19
Titel: Bilder landen und Speichern aus Datenbank
Ich habe da noch ein Problem mit dem Abspeichern und laden von Bildern aus der Datenbank. Ich habe ein Panel auf dem ich per Mausklick ein bild reinladen kann mit hilfe eines open dialog. Er zeigt es mir auch an und speichert es in der Datenbank aber wenn ich es öffnen will bringt er jpeg Fehler #50.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  if imgGlas.Picture.Graphic <> nil then
  begin
  JPG := TJPEGImage.Create;
  Strm := TblobStream.Create(TBlobField(qry.Fieldbyname   ('Bild')), bmWrite);
  JPG.Assign(ImgGlas.picture);
  JPG.SaveToStream(Strm);
  qry.Post;
  jpg.free;
  strm.Free;
  end;


und abruf:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  JPG := TJPEGImage.Create;
  Strm := TblobStream.Create(TBlobField    (qry.Fieldbyname'Bild')), bmRead);
  JPG.LoadFromStream(Strm);
  Image := Timage.Create(self);
  ImgGlas.parent := PImage ;    
  ImgGlas.Tag := qry.FieldByName('ID').asinteger;
  ImgGlas.Picture.Assign(JPG);
  ImgGlas.IncrementalDisplay := True;
  ImgGlas.Stretch := true;
  Strm.Free;
  JPG.Free;


Moderiert von user profile iconKlabautermann: Dieses Topic aus dem Thread "Probleme beim löschen von Dynamischen Tabsheets [http://www.delphi-forum.de/viewtopic.php?p=52220]" extrahiert.


LCS - Di 08.04.03 12:36

Vielleicht weil im aktuellen Datensatz gar kein Bild vorhanden ist? Ein welchen Ereignis lädst du das Bild? So mach ich das immer:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TfrmMain.srcDataChange(Sender: TObject; Field: TField);
var
   ms  : TMemoryStream;
   pg  : TJpegImage;
begin
  if  tblM_BILD.IsNull = False then begin
       ms  := TMemoryStream.Create;
       pg  := TJpegImage.Create;
       try
         tblM_BILD.SaveToStream(ms);
           ms.Position := 0;
           pg.LoadFromStream(ms);
           img.Picture.Assign(pg);
       finally
         ms.Free;
           pg.Free;
       end;
   end
   else
       img.Picture := nil;
end;


Gruss Lothar


Siggus19 - Di 08.04.03 12:49

hier wird es aus der Datenbank gelesen

Quelltext
1:
2:
Strm := TblobStream.Create(TBlobField(qry.Fieldbyname('Bild')), bmRead);
  JPG.LoadFromStream(Strm);


und hier ins image geladen

Quelltext
1:
  ImgGlas.Picture.Assign(JPG);                    


gruß alex


LCS - Di 08.04.03 13:00

Argh, mit dem Kopf auf den Tisch schlag. :autsch: Die Codezeilen konnte ich schon interpretieren. Falsch verstanden, egal.
Auf jeden Fall seh ich keine Prüfung, ob in dem betreffenden Feld überhaupt was gespeichert ist. Und wenn du versuchst Daten die gar nicht da sind in ein Image zu laden, dann krachts eben.

Gruss Lothar