![]() |
Datenbank: mysql • Version: 4xx • Zugriff über: zeos
JPg aus DB laden und in TImage anzeigen
Hi, ich möchte ein bild in einer tabelle speichern und dann in ein TImage laden.
Delphi-Quellcode:
Diesen Code fand ich in einem
// Speichern
jpg:=TJPEGImage.Create; m:=TMemoryStream.Create; try jpg.Assign(img_main_logo.Picture.Graphic); jpg.SaveToStream(m); m.Position := 0; TBlobField(aqTmp.FieldByName('pfad')).LoadFromStream(m); finally FreeAndNil(m); FreeAndNil(jpg); end; // Laden jpg:=TJPEGImage.Create; m:=TMemoryStream.Create; try TBlobField(aqTmp.FieldByName('pfad')).SaveToStream(m); m.Position:=0; jpg.LoadFromStream(m); img_main_logo.Picture.Assign(jpg); finally FreeAndNil(m); FreeAndNil(jpg); end; ![]() Das Speichern klappt, Problem ist halt, nachdem die Zeile:
Delphi-Quellcode:
ausgeführt wird, erhalte ich eine Fehlermeldung: Premature end of JPEG File
img_main_logo.Picture.Assign(jpg);
Hab mir schon nen wolf gesucht, leider nix dergleichen gefunden...muss doch irgendwie möglich sein :? Bin für jede Hilfe Dankbar Achso, in der Tabelle hab ich natürlich?! ein Blob-Feld genommen |
Re: JPg aus DB laden und in TImage anzeigen
Hi,
hier ein Code mit dem es auf jeden Fall funktioniert:
Delphi-Quellcode:
var jpg:TJPEGImage; m:TMemoryStream; begin jpg:=TJPEGImage.Create; m:=TMemoryStream.Create; if (Datenbank.FieldByName('foto') As TBlobField).BlobSize > 0 then try TBlobField(Datenbank.FieldByName('foto')).SaveToStream(m); m.Position:=0; jpg.LoadFromStream(m); Image1.Picture.Assign(jpg); finally FreeAndNil(m); FreeAndNil(jpg); Image1.Visible := True; end else Image1.Visible := False; end; Damit kannst Du auf jeden Fall ein Bild aus einer Datenbank in einem Image anzeigen lassen. Hoffe, dass es Dir hilft. Viel Erfolg |
Re: JPg aus DB laden und in TImage anzeigen
Re,
Leider nicht, erhalte wieder die gleiche fehlermeldung. Wenn du sagst, dass der Code auf jedenfall funktioniert, kann es ja nur an dem Code liegen, mitdem ich es inne Db reinpacke?! Dafür verwende ich folgenden Code :
Delphi-Quellcode:
Muss man da irgendwie prüfen obs komplett übertragen wurde oderso? Noch dazu gesagt, ich benutze Delphi7, vielleicht liegts ja auch an meiner JPeg-Unit??
Procedure Bild2DB(id:integer);
var blob : TMemoryStream; jpeg : TJPEGImage; Begin blob := TMemoryStream.Create(); jpeg := TJPEGImage.Create(form1); TRY if Form1.OPD.Execute then begin jpeg.LoadFromFile(Form1.OPD.FileName); blob.Clear; jpeg.SaveToStream(blob); end; Form1.Query.SQL.Text := 'Update filme Set bild = :bild where ID = :id'; Form1.Query.ParamByName('bild').LoadFromStream(blob,ftgraphic); Form1.Query.ParamByName('id').AsInteger := id; Form1.Query.ExecSQL; Finally jpeg.LoadFromStream(blob); END; blob.Free; jpeg.Free; end; |
Re: JPg aus DB laden und in TImage anzeigen
Hallo Lemmi,
zwischen SaveToStream() und LoadFromStream() solltest du die Position des Streams auf 0 zurücksetzen, damit auch wirklich etwas in die Datenbank geschrieben werden kann. Grüße vom marabu |
Re: JPg aus DB laden und in TImage anzeigen
Ich bin dem Fehler auf der Schliche :???:
Habe herausgefunden, dass ein blob-feld maximal 64kb aufnehmen kann, ein longblob hingegen 16mb. Nimmt man ein Longblob-Feld, funktioniert der oben angegebene code, bis auf die Sache: TJPEGImage kann Image1.Picture nicht zugewiesen werden. Wenn man nun größere Streams speichern möchte, bei mir ist es ein 700kb großes Bild, erhält man eine Fehlermeldung, dass das Packet zu groß sei. Dazu muss man den MySQL-Wert : Max_allowed_packet ändern, z.B. auf 16m(16mb). Weiß aber nur nich wo ich den finde... Somit ist das hauptsächliche Problem gelöst, Vielen Dank für eure Hilfestellungen. Scheut euch nicht vor Pn'S bezüglcih diesen Themas ;) |
Re: JPg aus DB laden und in TImage anzeigen
Der Spaltentyp BLOB kann nur 64K speichern. Wenn deine Images größer sind musst du natürlich einen passenderen Spaltentyp wählen. Vielleicht schaust du mal in die Dokumentation? Trial-and-Error kann ganz schön ermüdend sein.
Freundliche Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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-2025 by Thomas Breitkreuz