![]() |
Wie speichere ich ein DB-Blob in ein TImage
Hallo Programmierfreunde,
vor kurzem habe ich eine perfekte Hilfe durch himitsu bekommen. Ich wollte damals ein Bild (TImage) in eine Datenbank abspeichern. Dank himitsu habe ich das dann geschafft. Jetzt probiere ich schon die ganze Zeit herum, anders herum das hinzubekommen. Ich habe ein Bild in der Datenbank und möchte diese auf einem normalen TImage anzeigen lassen. Bei dem nachfolgendem Quelltext kommt keine Kompilierfehlermeldung. Erst wenn ich die Prozedure auslöse erhalte ich eine Exception der Klasse EInvalidGraphic bzw. die Bitmap ist ungültig. Vielleicht kann mir jemand von euch einen Hinweis geben. Besten Dank!
Delphi-Quellcode:
procedure TForm1.btn_ObjektClick(Sender: TObject);
var sname1,sname2: string; ms: TMemoryStream ; begin ed_Name1.text := TDB_O['oName1']; //vorhandene DB-Daten in TextEdit kopieren ed_Name2.Text := TDB_O['oName2']; //vorhandene DB-Daten in TextEdit kopieren //Jetzt noch DB-Bild in ein TImage (img_Objekt) bringen if not VarIsNull(TDB_O['oBild']) then begin ms := TMemoryStream.Create ; TBlobField(TDB_O.FieldByName('oBild')).SaveToStream(ms); ms.Position := 0; img_Objekt.Picture.Bitmap.LoadFromStream(ms); ms.Free ; end; end; |
AW: Wie speichere ich ein DB-Blob in ein TImage
In was für einem Format ist das Bild in der Datenbank gespeichert?
|
AW: Wie speichere ich ein DB-Blob in ein TImage
Delphi-Quellcode:
Bei Jpeg-Grafiken ist die Unit JPEG einzubinden.
Function TDatMod.BlobFeldInStream(Strom: TMemoryStream; Feld: TField): Boolean;
Var S : TStream; begin Result := False; If Not Feld.IsBlob Then Exit; If Feld.IsNull Then Exit; S := Feld.DataSet.CreateBlobStream(Feld, bmRead); Try Strom.Clear; Strom.CopyFrom(S,S.Size); Result := True; Finally S.Free; End; end; |
AW: Wie speichere ich ein DB-Blob in ein TImage
@mkinzler,
meistens ist das ein Jpg-Bild. In der Uses ist jpeg eingebunden. ich habe auch Folgendes schon probiert ... ohne Erfolg. gruss LingNeu
Delphi-Quellcode:
@Perlsau,
procedure TForm1.btn_ObjektClick(Sender: TObject);
var sname1,sname2: string; ms: TMemoryStream ; begin ed_Name1.text := TDB_O['oName1']; //vorhandene DB-Daten in TextEdit kopieren ed_Name2.Text := TDB_O['oName2']; //vorhandene DB-Daten in TextEdit kopieren //Jetzt noch DB-Bild in ein TImage (img_Objekt) bringen if not VarIsNull(TDB_O['oBild']) then begin ms := TMemoryStream.Create ; TBlobField(TDB_O.FieldByName('oBild')).SaveToStream(ms); ms.Position := 0; img_Objekt.Picture.Graphic.LoadFromStream(ms); ms.Free ; end; end; danke für das Beispiel. Leider bring ich den Code nicht zum Laufen. Trotzdem danke! |
AW: Wie speichere ich ein DB-Blob in ein TImage
Wenn Du die Grafik aus dem Stream mal auf der Festplatte abspeicherst (ms.SaveToFile), erhältst Du dann eine gültige Datei?
|
AW: Wie speichere ich ein DB-Blob in ein TImage
LoadFromFile erstellt die passende TGraphic-Instanz im Picture.Graphic, anhand er Dateiendung.
Es gibt keinen Code, welcher sich den Dateiinhalt ansieht, weswegen man bei LoadFromStream auch immer "selber" dafür sorgen muß, daß auch das richtig Grafikfirmat geladen ist, wo man dann das Bild reinladen kann. Wenn es ein JPeg ist, dann mußt du selber erstmal ein TJpegImage (oder wie das heißt) erstellen und dem Graphic zuweisen, bevor da das Bild rein kann. Nur für sowas wie Bitmap und Icon gibt es Property im Picture, welche das Format automatisch erstellen. Alternativ kannst du Picture.LoadFromFile verwenden und muß dafür aber die Datei erstmal auf die Festplatte speichern (mit der richtigen Dateiendung). |
AW: Wie speichere ich ein DB-Blob in ein TImage
Zitat:
Was genau bedeutet "bring ich den Code nicht zum Laufen". Der Code ist feherlfrei & wird bei mir zigfach eingesetzt. Davon abgesehen ist die Frage falsch gestellt, die eigentlich lauten sollte: Wie zeige ich ein DB-Blob in einem TImage an? Denn in diesem TImage kannst du nichts wirklich speichern, sondern nur was anzeigen. Bei Programmende ist das, was in dieser Komponente angezeigt wurde, wieder weg. Gespeichert wird auf einen Datenträger bzw. in eine Datenbank. |
AW: Wie speichere ich ein DB-Blob in ein TImage
hallo zusammen,
vielen dank erstmal für eure Hinweise und die Infos. Die Antwort hat etwas gedauert, da ich unterwegs war. Meine Lösung sieht jetzt so aus. Ich speichere das Bild auf die Platte - ist ein Jpg. Später hole ich mir das Bild dann mit LoadFromFile. Fertig. Da ich momentan auch nicht die Zeit habe, hier zu experimentieren ist diese Lösung ok. Es grüßt euch LingNeu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 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