Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Bild aus Datenbank in TImage Komponente (https://www.delphipraxis.net/154401-bild-aus-datenbank-timage-komponente.html)

Metallicwar 9. Sep 2010 15:19

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:
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
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:
Delphi-Quellcode:
        Frames.lNachname.Caption := qryGetDAtaName.Value;
Meine Frage:Wie lade ich das Bild aus der Datenbank in meine Image Komponente????


so funktionierst ja nicht: Frames.Image1.Picture := qryGetDAtaBild.Value --> Inkompatible Typen Picture und Bytes

mkinzler 9. Sep 2010 15:41

AW: Bild aus Datenbank in TImage Komponente
 
Als Stream aus dem Feld in das TImage

Metallicwar 9. Sep 2010 15:52

AW: Bild aus Datenbank in TImage Komponente
 
Delphi-Quellcode:
var
Bilder: TStream;
....
qryGetDAtaBild.SaveToStream(Bilder);
Frames.Image1.Picture := qryGetDAtaBild.LoadFromStream(Bilder);
....
Inkompatible Typen: TStream und procedure....

DeddyH 9. Sep 2010 15:54

AW: Bild aus Datenbank in TImage Komponente
 
Delphi-Quellcode:
Frames.Image1.Picture.LoadFromStream(Bilder);

Metallicwar 9. Sep 2010 15:57

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:

DeddyH 9. Sep 2010 15:59

AW: Bild aus Datenbank in TImage Komponente
 
Dann versuch es mal so:
Delphi-Quellcode:
Frames.Image1.Picture.Graphic.LoadFromStream(Bilder);
Wenn das auch nicht geht, in eine entsprechende temporäre Grafik-Variable laden und die dann zuweisen.

Metallicwar 9. Sep 2010 16:03

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"

mkinzler 9. Sep 2010 16:05

AW: Bild aus Datenbank in TImage Komponente
 
Versuch es mal über einen MemoryStream.

himitsu 9. Sep 2010 16:07

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.

http://www.delphipraxis.net/154190-b...einbinden.html

DeddyH 9. Sep 2010 16:26

AW: Bild aus Datenbank in TImage Komponente
 
Zitat:

Zitat von DeddyH
Wenn das auch nicht geht, in eine entsprechende temporäre Grafik-Variable laden und die dann zuweisen.

Zitat:

Zitat von himitsu (Beitrag 1048470)
Eventuell das Bild vorher noch in ein TBitmap, TJPegImage oder was auch immer paßt, reinladen und dann ans TImage.Picture übergeben.

:roll:

Metallicwar 9. Sep 2010 16:29

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?

xZise 9. Sep 2010 16:31

AW: Bild aus Datenbank in TImage Komponente
 
Moin,
es müsste ungefähr so gehen:

Delphi-Quellcode:
Bild.LoadFromStream(...);
Image1.Picture.Assign(Bild);
MfG
Fabian

DeddyH 9. Sep 2010 16:40

AW: Bild aus Datenbank in TImage Komponente
 
Und Bild anschließend wieder freigeben.

isilive 9. Sep 2010 19:27

AW: Bild aus Datenbank in TImage Komponente
 
Zitat:

Bild := TJpegImage.Create;
Bild...? wie gehts weiter?
Ich bin zwar erst morgen wieder zuhause, aber wenn du's bis dann nicht hast, schreib mir eine PM!
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:

Metallicwar 10. Sep 2010 07:34

AW: Bild aus Datenbank in TImage Komponente
 
Moin Moin,
ich habs hinbekommen...
folgendermaßen:

Delphi-Quellcode:
var
sBlobFile : String;
.....
sBlobFile := 'c:\Test.jpg';

qryGetDAtaBild.SaveToFile(sBlobFile);

Frames.Image1.Picture.LoadFromFile(sBlobFile);
mfg

Metallicwar 10. Sep 2010 08:03

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?

mkinzler 10. Sep 2010 08:29

AW: Bild aus Datenbank in TImage Komponente
 
Zitat:

Wie könnte ich diesen Fehler beheben?
Vorher überprüfen ob Feld NULL ist.

Metallicwar 10. Sep 2010 08:50

AW: Bild aus Datenbank in TImage Komponente
 
Folgendes hab ich probiert:
Delphi-Quellcode:
        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;
Aber diese Fehlermeldung tritt weiterhin auf ...

mkinzler 10. Sep 2010 09:00

AW: Bild aus Datenbank in TImage Komponente
 
Delphi-Quellcode:
if not qryGetDAtaBild.isNull

Metallicwar 10. Sep 2010 09:05

AW: Bild aus Datenbank in TImage Komponente
 
mhhm, der Fehler tritt auch mit
Delphi-Quellcode:
.isNull
auf..

mkinzler 10. Sep 2010 09:07

AW: Bild aus Datenbank in TImage Komponente
 
Was steht denn in dem Feld drinnen, wenn kein Bild zugeordnet ist?

Metallicwar 10. Sep 2010 09:19

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)

mkinzler 10. Sep 2010 09:44

AW: Bild aus Datenbank in TImage Komponente
 
Doch, es scheint etwas drinnen zu stehen. Lass dir mal den Inhalt eines entsprechenden Blobs anzeigen

Metallicwar 10. Sep 2010 09:51

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

scrat1979 10. Sep 2010 10:06

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.

Metallicwar 10. Sep 2010 11:02

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^^

stahli 10. Sep 2010 11:22

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).

Bummi 10. Sep 2010 11:51

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;

Metallicwar 10. Sep 2010 12:02

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:
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');
soooo, aber ich müsste wissen, welche Unit ich in die uses Klausel eintragen muss, weil TFileObject erkennt er nicht... :(

Metallicwar 10. Sep 2010 13:31

AW: Bild aus Datenbank in TImage Komponente
 
oooh man ey..
ich kriegs einfach nicht hin :*(

Metallicwar 10. Sep 2010 14:03

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;

xZise 11. Sep 2010 11:03

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:
var
  buffer : TStream;
begin
  buffer := TMemoryStream.Create;
  try
    qryGetDAtaBild.SaveToStream(buffer);
    Frames.Image1.Picture.LoadFromStream(buffer);
Ich hoffe doch den Rest kriegst du noch hin :)

Vielleicht habe ich das auch übersehen, aber von welchen Typ ist qryGetDataBild?

MfG
Fabian

DeddyH 11. Sep 2010 11:41

AW: Bild aus Datenbank in TImage Komponente
 
Das klingt nach TQuery ;)

Metallicwar 13. Sep 2010 08:30

AW: Bild aus Datenbank in TImage Komponente
 
richtig DeddyH
-->
Delphi-Quellcode:
qryGetDAtaBild: TBlobField;
Inkompatible Typen String und TStream;

DeddyH 13. Sep 2010 08:34

AW: Bild aus Datenbank in TImage Komponente
 
Nee, nicht richtig. TQuery stammt von TDataset ab, TBlobField von TField.

Metallicwar 13. Sep 2010 09:55

AW: Bild aus Datenbank in TImage Komponente
 
ok :)
könnt ihr mir bei der Fehlermeldung weiterhelfen?

DeddyH 13. Sep 2010 10:04

AW: Bild aus Datenbank in TImage Komponente
 
Zeig mal etwas mehr Code.

Metallicwar 13. Sep 2010 10:18

AW: Bild aus Datenbank in TImage Komponente
 
Delphi-Quellcode:
        if qryGetDAtaBild.BlobSize > 0 then
        begin
          stBild := TMemoryStream.Create;
          qryGetDAtaBild.SaveToFile(stBild);
          Frames.Image1.Picture.LoadFromFile(stBild);
        end;
ist eigentlich der selbe den du oben gepostet hast.

DeddyH 13. Sep 2010 10:19

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;

Metallicwar 13. Sep 2010 10:25

AW: Bild aus Datenbank in TImage Komponente
 
Delphi-Quellcode:
Frames.Image1.Picture.LoadFromStream(stBild);
--> Auf protected Symbol T.Picture.LoadFromStream kann nicht zugegriffen werden.

...Picture. kennt keine procedure die LoadFromStream heißt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 Uhr.
Seite 1 von 2  1 2      

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