AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie speichere ich ein DB-Blob in ein TImage

Ein Thema von LingNeu · begonnen am 9. Sep 2014 · letzter Beitrag vom 13. Sep 2014
Antwort Antwort
LingNeu

Registriert seit: 18. Dez 2006
164 Beiträge
 
Delphi 7 Enterprise
 
#1

Wie speichere ich ein DB-Blob in ein TImage

  Alt 9. Sep 2014, 16:12
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;
Wenn man denkt, dann denkt man nur, das man denkt!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Wie speichere ich ein DB-Blob in ein TImage

  Alt 9. Sep 2014, 17:06
In was für einem Format ist das Bild in der Datenbank gespeichert?
Markus Kinzler
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: Wie speichere ich ein DB-Blob in ein TImage

  Alt 10. Sep 2014, 03:25
Delphi-Quellcode:
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;
Bei Jpeg-Grafiken ist die Unit JPEG einzubinden.
  Mit Zitat antworten Zitat
LingNeu

Registriert seit: 18. Dez 2006
164 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Wie speichere ich ein DB-Blob in ein TImage

  Alt 10. Sep 2014, 10:54
@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:
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;
@Perlsau,
danke für das Beispiel.
Leider bring ich den Code nicht zum Laufen. Trotzdem danke!
Wenn man denkt, dann denkt man nur, das man denkt!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Wie speichere ich ein DB-Blob in ein TImage

  Alt 10. Sep 2014, 10:57
Wenn Du die Grafik aus dem Stream mal auf der Festplatte abspeicherst (ms.SaveToFile), erhältst Du dann eine gültige Datei?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#6

AW: Wie speichere ich ein DB-Blob in ein TImage

  Alt 10. Sep 2014, 11:12
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).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: Wie speichere ich ein DB-Blob in ein TImage

  Alt 11. Sep 2014, 00:07
@Perlsau, danke für das Beispiel. Leider bring ich den Code nicht zum Laufen. Trotzdem danke!
Das ist ja mal wieder eine äußerst aussagekräftige Fehlermeldung
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.

Geändert von Perlsau (11. Sep 2014 um 00:09 Uhr)
  Mit Zitat antworten Zitat
LingNeu

Registriert seit: 18. Dez 2006
164 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Wie speichere ich ein DB-Blob in ein TImage

  Alt 13. Sep 2014, 06:25
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
Wenn man denkt, dann denkt man nur, das man denkt!
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:56 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