![]() |
Datenbank: ADS • Version: 9 • Zugriff über: Delphi 2009
Bild aus Datenbank in TImage Komponente
Hallo,
und erneut habe ich eine mit Sicherheit leicht zu beantwortende Frage: Meine Query ließt bestimmte Daten aus DB aus u.a. auch das Bild.
SQL-Code:
Ich habe ein Frame, auf dem Labels hinterlegt sind (lName, lVorname, lOrt, etc..) Diese habe ich bereits mit den Daten aus der Datenbank gefüllt und zwar folgendermaßen:
SELECT
p.Name, p.Vorname, abt.Bezeichnung, pz.Austritt, F.Bezeichnung, F.Zusatz, F.Strasse, F.Plz, F.Ort, p.ID, bd.Bild From Personal p Left Outer Join Personalzusatz pz on p.ID = pz.Id_Personal Left Outer Join Abteilungen abt on p.ID_Abteilungen = abt.Id Left Outer Join Firma F on p.ID_Firma = F.Id Left Outer Join Bilddatenbank bd on bd.ID_Personal = p.id Order By P.name
Delphi-Quellcode:
Meine Frage:Wie lade ich das Bild aus der Datenbank in meine Image Komponente????
Frames.lNachname.Caption := qryGetDAtaName.Value;
so funktionierst ja nicht: Frames.Image1.Picture := qryGetDAtaBild.Value --> Inkompatible Typen Picture und Bytes |
AW: Bild aus Datenbank in TImage Komponente
Als Stream aus dem Feld in das TImage
|
AW: Bild aus Datenbank in TImage Komponente
Delphi-Quellcode:
Inkompatible Typen: TStream und procedure....
var
Bilder: TStream; .... qryGetDAtaBild.SaveToStream(Bilder); Frames.Image1.Picture := qryGetDAtaBild.LoadFromStream(Bilder); .... |
AW: Bild aus Datenbank in TImage Komponente
Delphi-Quellcode:
Frames.Image1.Picture.LoadFromStream(Bilder);
|
AW: Bild aus Datenbank in TImage Komponente
Auf protected Symbol TPicture-LoadFromStream kann nicht zugegriffen werden.
P.S. Ihr seit echt spitze, so schnell hab ich noch nirgendwo Hilfe bekommen und dazu noch super Antworten. Klasse :thumb: |
AW: Bild aus Datenbank in TImage Komponente
Dann versuch es mal so:
Delphi-Quellcode:
Wenn das auch nicht geht, in eine entsprechende temporäre Grafik-Variable laden und die dann zuweisen.
Frames.Image1.Picture.Graphic.LoadFromStream(Bilder);
|
AW: Bild aus Datenbank in TImage Komponente
mhhm.
Code lässt sich compilieren und ausführen. Nachdem ich den Button zum Frames erstellen drücke, erhalte ich eine Zugriffsverletzung. Exception-Klasse EAccessViolaten mit Meldung Zugriffsverletzung bei Adresse...... nochmal eine Zusatzinfo, vll hilft das: Datenfeld Bild ist vom Typ "BLOB" |
AW: Bild aus Datenbank in TImage Komponente
Versuch es mal über einen MemoryStream.
|
AW: Bild aus Datenbank in TImage Komponente
Eventuell das Bild vorher noch in ein TBitmap, TJPegImage oder was auch immer paßt, reinladen und dann ans TImage.Picture übergeben.
![]() |
AW: Bild aus Datenbank in TImage Komponente
Zitat:
Zitat:
|
AW: Bild aus Datenbank in TImage Komponente
habe folgendes gemacht:
uses
Delphi-Quellcode:
... JPEG;
Delphi-Quellcode:
var
Bild: TJpegImage; ......
Delphi-Quellcode:
Bild := TJpegImage.Create;
Bild...? wie gehts weiter? |
AW: Bild aus Datenbank in TImage Komponente
Moin,
es müsste ungefähr so gehen:
Delphi-Quellcode:
MfG
Bild.LoadFromStream(...);
Image1.Picture.Assign(Bild); Fabian |
AW: Bild aus Datenbank in TImage Komponente
Und Bild anschließend wieder freigeben.
|
AW: Bild aus Datenbank in TImage Komponente
Zitat:
Ich hab daheim eine Unit, die Jpgs aus Memory und Filestreams liest. Das JPG wird dann auch einem BMP und/oder einem TImage zugewiesen... Sollte mit Assign und .loadfromstream ganz gut funktionieren... :coder: |
AW: Bild aus Datenbank in TImage Komponente
Moin Moin,
ich habs hinbekommen... folgendermaßen:
Delphi-Quellcode:
mfg
var
sBlobFile : String; ..... sBlobFile := 'c:\Test.jpg'; qryGetDAtaBild.SaveToFile(sBlobFile); Frames.Image1.Picture.LoadFromFile(sBlobFile); |
AW: Bild aus Datenbank in TImage Komponente
aaah, habe noch einen Fehler:
Manche Mitarbeiter aus DB haben keine Bilder, dieses "nicht vorhandene Bild" versucht er ins TImage zu laden, daher entsteht warscheinlich der Fehler JPEP-Fehler #42 ist aufgetreten Wie könnte ich diesen Fehler beheben? Könnte ich evtl. abfragen, ob für den aktuellen Datensatz ein Bild vorhanden ist, wenn nicht soll er einfach ein weißes JPEG Bild was ich beispielsweise nach Programmstart unter C:\Leer.jpg speicher. Oder kann man das besser hinbekommen? |
AW: Bild aus Datenbank in TImage Komponente
Zitat:
|
AW: Bild aus Datenbank in TImage Komponente
Folgendes hab ich probiert:
Delphi-Quellcode:
Aber diese Fehlermeldung tritt weiterhin auf ...
if qryGetDAtaBild <> nil then
begin sBlobFile := 'c:\Test.jpg'; qryGetDAtaBild.SaveToFile(sBlobFile); Frames.Image1.Picture.LoadFromFile(sBlobFile); DeleteFile('c:\Test.jpg'); end else begin sBildLeer := 'C:\BildLeer.jpg'; qryGetDAtaBild.SaveToFile(sBildLeer); Frames.Image1.Picture.LoadFromFile(sBildLeer); end; |
AW: Bild aus Datenbank in TImage Komponente
Delphi-Quellcode:
if not qryGetDAtaBild.isNull
|
AW: Bild aus Datenbank in TImage Komponente
mhhm, der Fehler tritt auch mit
Delphi-Quellcode:
auf..
.isNull
|
AW: Bild aus Datenbank in TImage Komponente
Was steht denn in dem Feld drinnen, wenn kein Bild zugeordnet ist?
|
AW: Bild aus Datenbank in TImage Komponente
also in meiner Tabelle, in der die Bilder hinterlegt sind, sind nur Bilder hinterlegt von denen auch ein Bild vorhanden ist. Wenn ein Mitarbeiter kein Bild hat steht auch nicht in der Tabelle.
ID|||||ID_Personal|||||Bild 1||||||||||1||||||||||BLOB) 2||||||||||2||||||||||BLOB) 3||||||||||4||||||||||BLOB) |
AW: Bild aus Datenbank in TImage Komponente
Doch, es scheint etwas drinnen zu stehen. Lass dir mal den Inhalt eines entsprechenden Blobs anzeigen
|
AW: Bild aus Datenbank in TImage Komponente
Alle 3 BLOB Felder enthalten folgendes: ÿØÿà
Hab keine Ahnung was das ist, kann man mir auch mal kurz erklären^^ :) Dass etwas drinne steht, ist mir klar, aber nur für die Mitarbeiter für denen ich ein Bild ausgewählt habe, MA die kein Bild hinterlegt haben, werden in der Tabelle doch auch nicht aufgelistet |
AW: Bild aus Datenbank in TImage Komponente
(1) Könntest Du alternativ auch eine zusäztliche Tabellenspalte einrichten
(z.B. IMGEXISTS) und hier 1 oder 0 einsetzen, je nachdem ob ein Bild in dem BLOB steht oder nicht. Direkt das BLOB überprüfen wäre mit sicherheit eleganter. (2) Warum gehst Du denn beim laden / anzeigen des Bildes über eine temp. Datei?!? Das verstehe ich nicht, es müsste doch auch - wie schon er- wähnt wurde - über einen TMemoryStream gehen. |
AW: Bild aus Datenbank in TImage Komponente
zu (1): Zusätzliche Tabellenspalten möchte ich nicht unbedingt anlegen. Da gibt es doch bestimmt auch andere Wege, mein Problem zu beheben oder ? :roll:
zu (2): Wäre vll sogar besser^^ |
AW: Bild aus Datenbank in TImage Komponente
Evtl kannst Du die Streamgröße (.Size) abfragen. Wenn es weniger als 10 Bytes sind, weist Du den Stream nicht zu (wenn das sonst Fehler verursacht).
|
AW: Bild aus Datenbank in TImage Komponente
ausgehend von JPG-Images ....
Delphi-Quellcode:
procedure TForm5.saveClick(Sender: TObject); var s:TMemoryStream; i:TJPEGImage; begin i:=TJPEGImage.Create; s:=TMemoryStream.Create; try d.Edit; TJPEGImage(Image1.Picture.Graphic).SaveToStream(s); Showmessage(IntToStr(s.Position)); s.Position := 0; TBlobField(dBild).LoadFromStream (s); d.Post; finally s.Free; i.Free; end; end; procedure TForm5.Image1Click(Sender: TObject); var s:TMemoryStream; i:TJPEGImage; begin i:=TJPEGImage.Create; s:=TMemoryStream.Create; try TBlobField(dBild).SaveToStream(s); if s.Position > 0 then begin s.Position := 0; try i.LoadFromStream (s); Image2.Picture.Assign(i) ; except end; end; finally s.Free; i.Free end; end; |
AW: Bild aus Datenbank in TImage Komponente
Hi Leute :)
Erstmal danke für die bisherige Hilfe und die Codes :) habe vll noch eine Möglichkeit
Delphi-Quellcode:
soooo, aber ich müsste wissen, welche Unit ich in die uses Klausel eintragen muss, weil TFileObject erkennt er nicht... :(
var
Datei: TFileObject; ... sBlobFile := 'c:\Test.jpg'; qryGetDAtaBild.SaveToFile(sBlobFile); Datei := TFileObject.Create(); Datei := sBlobFile; if FileSize(Datei) > 0 then Frames.Image1.Picture.LoadFromFile(sBlobFile); DeleteFile('c:\Test.jpg'); |
AW: Bild aus Datenbank in TImage Komponente
oooh man ey..
ich kriegs einfach nicht hin :*( |
AW: Bild aus Datenbank in TImage Komponente
Ich habe eine Lösung:
Delphi-Quellcode:
sBlobFile := 'c:\Test.jpg'; if qryGetDAtaBild.BlobSize > 0 then begin qryGetDAtaBild.SaveToFile(sBlobFile); Frames.Image1.Picture.LoadFromFile(sBlobFile); DeleteFile(sBlobFile); end; |
AW: Bild aus Datenbank in TImage Komponente
Was hältst du davon wenn du keine Datei verwendest? Das Programm kann ja nicht unterscheiden ob es aus den RAM oder von der HDD kommt. Weil SaveToFile und LoadFromFile wiederum benutzen auch nur Streams.
Also würde ich es so schreiben:
Delphi-Quellcode:
Ich hoffe doch den Rest kriegst du noch hin :)
var
buffer : TStream; begin buffer := TMemoryStream.Create; try qryGetDAtaBild.SaveToStream(buffer); Frames.Image1.Picture.LoadFromStream(buffer); Vielleicht habe ich das auch übersehen, aber von welchen Typ ist qryGetDataBild? MfG Fabian |
AW: Bild aus Datenbank in TImage Komponente
Das klingt nach TQuery ;)
|
AW: Bild aus Datenbank in TImage Komponente
richtig DeddyH
-->
Delphi-Quellcode:
Inkompatible Typen String und TStream;
qryGetDAtaBild: TBlobField;
|
AW: Bild aus Datenbank in TImage Komponente
Nee, nicht richtig. TQuery stammt von TDataset ab, TBlobField von TField.
|
AW: Bild aus Datenbank in TImage Komponente
ok :)
könnt ihr mir bei der Fehlermeldung weiterhelfen? |
AW: Bild aus Datenbank in TImage Komponente
Zeig mal etwas mehr Code.
|
AW: Bild aus Datenbank in TImage Komponente
Delphi-Quellcode:
ist eigentlich der selbe den du oben gepostet hast.
if qryGetDAtaBild.BlobSize > 0 then
begin stBild := TMemoryStream.Create; qryGetDAtaBild.SaveToFile(stBild); Frames.Image1.Picture.LoadFromFile(stBild); end; |
AW: Bild aus Datenbank in TImage Komponente
Delphi-Quellcode:
if qryGetDAtaBild.BlobSize > 0 then
begin stBild := TMemoryStream.Create; try qryGetDAtaBild.SaveToStream(stBild); //Stream statt File Frames.Image1.Picture.LoadFromStream(stBild); //s.o. finally stBild.Free; end; end; |
AW: Bild aus Datenbank in TImage Komponente
Delphi-Quellcode:
--> Auf protected Symbol T.Picture.LoadFromStream kann nicht zugegriffen werden.
Frames.Image1.Picture.LoadFromStream(stBild);
...Picture. kennt keine procedure die LoadFromStream heißt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 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 by Thomas Breitkreuz