Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Bild über TImage aus der Datenbank holen? (https://www.delphipraxis.net/101030-bild-ueber-timage-aus-der-datenbank-holen.html)

Jack23 7. Okt 2007 13:14

Datenbank: Access • Version: 2003 • Zugriff über: ADO

Bild über TImage aus der Datenbank holen?
 
Hallo

ich habe ein TImage und möchte drüber aus der Datenbank ein Bild anzeigen lassen.

Das Bild ist in der Datenbank so gespeichert: C:\Image.jpg

Wie bekomme ich das hin?

DeddyH 7. Okt 2007 13:26

Re: Bild über TImage aus der Datenbank holen?
 
Hier mal ein Beispiel aus einem Testprojekt von mir (deshalb die blöden Bezeichner):
Delphi-Quellcode:
procedure TFrmMain.LoadPic;
var Stream: TStream;
    aJPG: TJPEGImage;
begin
  ZQuery1.Close;
  with ZQuery1.SQL do
    begin
      Clear;
      Add('SELECT Grafik FROM Bild');
      Add('WHERE ID = :id');
     end;
  ZQuery1.ParamByName('id').AsInteger := PKnoten(TreeView1.Selected.Data)^.KnotenId;
  ZQuery1.Open;
  if (ZQuery1.RecordCount > 0) and not ZQuery1.FieldByName('Grafik').IsNull and ZQuery1.FieldByName('Grafik').IsBlob then
    begin
      //Hier ist der interessante Teil
      aJPG := TJPEGImage.Create;
      Stream := ZQuery1.CreateBlobStream(ZQuery1.FieldByName('Grafik'),bmRead);
      try
        aJPG.LoadFromStream(Stream);
        Image1.Picture.Graphic := aJPG;
        FitImage;
      finally
        Stream.Free;
        aJPG.Free;
      end;
    end
  else
    begin
      Image1.Picture.Assign(nil);
      Label1.Visible := true;
    end;
end;
[edit] Oder ist nur der Pfad in der DB abgelegt? [/edit]

Jack23 7. Okt 2007 13:33

Re: Bild über TImage aus der Datenbank holen?
 
Es ist nur der Pfad in der DB abgelegt.

SirThornberry 7. Okt 2007 13:36

Re: Bild über TImage aus der Datenbank holen?
 
dann
Delphi-Quellcode:
Image.picture.LoadFromFile(DateinameAusDatenbank);

DeddyH 7. Okt 2007 13:38

Re: Bild über TImage aus der Datenbank holen?
 
Das ist doch viel einfacher.
Delphi-Quellcode:
//Auslesen des Pfades
query.SQL.Text := 'SELECT Pfad FROM Tabelle WHERE Bedingung';
query.Open;
Pfad := Query.FieldByName('Pfad').AsString;
//Versuchen, die Grafik ins Image zu laden
try
  aJPG := TJPEGImage.Create;
  try
    aJPG.LoadFromFile(Pfad);
    Image1.Picture.Graphic := aJPG;
  except
    ShowMessage('Fehler beim Laden der Grafik');
  end;
finally
  aJPG.Free;
end;
Getippt und nicht getestet.

SirThornberry 7. Okt 2007 13:40

Re: Bild über TImage aus der Datenbank holen?
 
das erzeugen des JPEG-Image ist überflüssig wenn die unit jpeg eingebunden ist. Dadurch kann TPciture mit LoadFromFile das JPEG laden.

DeddyH 7. Okt 2007 13:42

Re: Bild über TImage aus der Datenbank holen?
 
War mir auch gerade aufgefallen, aber Du warst schneller, bevor ich editieren konnte ;)

Jack23 7. Okt 2007 13:59

Re: Bild über TImage aus der Datenbank holen?
 
Ich danke euch schon mal. Nun habe ich aber ein Problem.

So sieht meine jetzige Abfrage aus:
Delphi-Quellcode:
procedure TForm9.test(Sender: TObject);
begin
 ADOQuery1.Active:=false;
 ADOQuery1.Sql.Clear;
 ADOQuery1.Sql.Add('SELECT * FROM abc WHERE a like "%" ORDER BY test asc');
 ADOQuery1.Active:=true;
end;
Nach dieser Abfrage werden die Daten in einem neuem Fenster, in einem DBGrid angezeigt.
neben diesem DBgrid befindet sich das TImage. Wie bekomme ich die Daten von der oben genannten Abfrage mit deinem Code in das TImage?

mkinzler 7. Okt 2007 14:02

Re: Bild über TImage aus der Datenbank holen?
 
Betreibe doch einfach einen Wissenstranfer und ersetzte Query durch ADOQuery1

Jack23 7. Okt 2007 14:09

Re: Bild über TImage aus der Datenbank holen?
 
Also meinst du das so?

Delphi-Quellcode:
//Auslesen des Pfades
 Pfad :=ADOQuery1.FieldByName('Pfad').AsString;
//Versuchen, die Grafik ins Image zu laden
try
  aJPG := TJPEGImage.Create;
  try
    aJPG.LoadFromFile(Pfad);
    Image1.Picture.Graphic := aJPG;
  except
    ShowMessage('Fehler beim Laden der Grafik');
  end;
finally
  aJPG.Free;
  end;
end;

mkinzler 7. Okt 2007 14:29

Re: Bild über TImage aus der Datenbank holen?
 
Wenn das Feld 'Pfad' heißt: Ja

Jack23 7. Okt 2007 14:40

Re: Bild über TImage aus der Datenbank holen?
 
Ah ok aber wie und wo muss ich das dann einbauen? Er sagt immer "INITIALIZATION erwartet aber Beziechner Pfad erhalten"

mkinzler 7. Okt 2007 14:44

Re: Bild über TImage aus der Datenbank holen?
 
Hast du die Variable deklariert?

Jack23 7. Okt 2007 14:46

Re: Bild über TImage aus der Datenbank holen?
 
Ich habe nur den Code eingebaut wie er oben steht. Wie Variable Definieren?

mkinzler 7. Okt 2007 14:49

Re: Bild über TImage aus der Datenbank holen?
 
Wie wäre es mal mit einem Grundlagentutorial von Pascal bzw Delphi? Die Codebeispiele sollen nur die Lösung anskizzieren und können nicht als Musterlösung für Cut&Paste-Programmierer dienen.
Bei Pascal muss man jede Variable die man verwenden will vorher deklarieren.

Jack23 7. Okt 2007 14:55

Re: Bild über TImage aus der Datenbank holen?
 
Das ist aber kein Pascal das ist Delphi.

und außerdem habe ich das nicht einfach so kopiert.

Sondern es sieht bei mir so aus:
Delphi-Quellcode:
procedure TForm9.test(Sender: TObject);
//Auslesen des Pfades
Pfad :=ADOQuery1.FieldByName('Pfad').AsString;
//Versuchen, die Grafik ins Image zu laden
try
  aJPG := TJPEGImage.Create;
  try
    aJPG.LoadFromFile(Pfad);
    Image1.Picture.Graphic := aJPG;
  except
    ShowMessage('Fehler beim Laden der Grafik');
  end;
finally
  aJPG.Free;
  end;
end;
end;
Wie definiere ich die Variable Pfad?

mkinzler 7. Okt 2007 14:58

Re: Bild über TImage aus der Datenbank holen?
 
Delphi ist aber Pascal und es gilt das selbe jede variable vor der Verwendung zu deklarieren:

Delphi-Quellcode:
procedure TForm9.test(Sender: TObject);
var
    Pfad: string;
begin
//Auslesen des Pfades
Pfad :=ADOQuery1.FieldByName('Pfad').AsString;
Außerdem fehlte das begin

DeddyH 7. Okt 2007 14:59

Re: Bild über TImage aus der Datenbank holen?
 
Hast Du den Verlauf den Threads nicht gelesen?
Delphi-Quellcode:
procedure TForm9.test(Sender: TObject);
begin
  //Versuchen, die Grafik ins Image zu laden
  try
    Image1.Picture.Graphic.LoadFromFile(ADOQuery1.FieldByName('Pfad').AsString);
  except
    ShowMessage('Fehler beim Laden der Grafik');
  end;
end;
[edit] begin und Einrückungen hinzugefügt [/edit]

Jack23 7. Okt 2007 15:11

Re: Bild über TImage aus der Datenbank holen?
 
Achso das ist definieren. Das wusste ich nicht. Aber wie sieht es denn mit ADOQuery1 aus? Da kommt auch die Meldung Undefinierter Bezeichner: 'ADOQuery1'. Wie muss ich die denn definieren?

DeddyH 7. Okt 2007 15:17

Re: Bild über TImage aus der Datenbank holen?
 
Hast Du denn eine ADOQuery auf dem Formular?

Jack23 7. Okt 2007 15:20

Re: Bild über TImage aus der Datenbank holen?
 
Nein die ist auf einem anderen. Das mit der ADOQuery1 ist aber oben unter uses eingebunden.

DeddyH 7. Okt 2007 15:22

Re: Bild über TImage aus der Datenbank holen?
 
Dann lautet die Syntax auch
Delphi-Quellcode:
AnderesForm.AdoQuery1

mkinzler 7. Okt 2007 15:22

Re: Bild über TImage aus der Datenbank holen?
 
Dann kannst du dieses mit
Delphi-Quellcode:
<Formname>.ADOQuery1
ansprechen

DeddyH 7. Okt 2007 15:23

Re: Bild über TImage aus der Datenbank holen?
 
Ha, einmal schneller als mkinzler gewesen :zwinker:

mkinzler 7. Okt 2007 15:25

Re: Bild über TImage aus der Datenbank holen?
 
Ich würde mal sagen, gleichschnell

DeddyH 7. Okt 2007 15:30

Re: Bild über TImage aus der Datenbank holen?
 
Vermutlich hatten wir deshalb beide keinen roten Kasten.

Jack23 7. Okt 2007 15:32

Re: Bild über TImage aus der Datenbank holen?
 
So habe ich das jetzt gemacht.

Delphi-Quellcode:
Form2.ADOQuery1.FieldByName
jetzt kommt aber diese Meldung

Form2 enthält keine Element namens ADOQuery1

edit erledigt. nur ein kleiner tippfehler.

mkinzler 7. Okt 2007 15:39

Re: Bild über TImage aus der Datenbank holen?
 
Du solltest dich trotzdem mal den Grundlagen zuwenden.

Jack23 7. Okt 2007 15:40

Re: Bild über TImage aus der Datenbank holen?
 
Jetzt habe ich nur noch ein kleines Problem. Den Pfad dynamisch machen. z.B. C:\jpg.jpg

Wenn ich aber jetzt das Programm auf einen anderen Computer mache ist vielleicht der pfad ganz anders. Also möchte ich es so haben das die Bilder immer im gleichen Ordner wie die exe sind z.B. \bilder\jpg.jpg

Ich hoffe das ist klar wie ich das meine.

DeddyH 7. Okt 2007 15:41

Re: Bild über TImage aus der Datenbank holen?
 
Lass Dir mal ExtractFilePath(ParamStr(0)) ausgeben ;)

mkinzler 7. Okt 2007 15:41

Re: Bild über TImage aus der Datenbank holen?
 
Den Paf der Exe kannst du mit
Delphi-Quellcode:
ExtractFilePath (ParamStr(0));
ermitteln

DeddyH 7. Okt 2007 15:45

Re: Bild über TImage aus der Datenbank holen?
 
:bouncing4: Noch einmal und ich mach den Sekt auf :bounce1:

Jack23 7. Okt 2007 15:50

Re: Bild über TImage aus der Datenbank holen?
 
:hello:


Ah perfekt danach habe ich gesucht.

Nur jetzt habe ich ein Problem. Es wird gar kein Bild angezeigt.

Auch ohne ExtractFilePath (ParamStr(0));. Habe ich gerade getestet. Ich weiß nicht was da los ist.

Mein Code sieht jetzt so aus:
Delphi-Quellcode:
Image1.Picture.Graphic.LoadFromFile(Form2.ADOQuery1.FieldByName('Pfad').AsString);
Und das Bild liegt in C:\test.jpg

DeddyH 7. Okt 2007 15:52

Re: Bild über TImage aus der Datenbank holen?
 
Ist denn die Datenmenge geöffnet?

Jack23 7. Okt 2007 15:56

Re: Bild über TImage aus der Datenbank holen?
 
Ich habe gerade überlegt. Kann ich statt der ADOQuery1 auch eine DataSource nutzen?

mkinzler 7. Okt 2007 15:58

Re: Bild über TImage aus der Datenbank holen?
 
Eine DataSource ist aber nur eine Bindeglied zwischen einer Datensensitiven Komponente und einem DataSet (Query, Table, usw)

DeddyH 7. Okt 2007 16:02

Re: Bild über TImage aus der Datenbank holen?
 
Du bräuchtest ein Dataset, und eine Query ist so eins.

Jack23 7. Okt 2007 16:03

Re: Bild über TImage aus der Datenbank holen?
 
Achso. ich dachte es ist besser weil mein DB Memo u.s.w auch alle eine DataSource nutzen.

Aber mit einer ADOQuery geht es nicht. ich versuche mal zu erklären warum.

Mein erstes Fenster sieh so aus:

DBGrid und ein Button. Wenn ich auf den Button klicke erscheinen in dem DBGRID ein paar Einträge.

Ich mache dann auf dem Eintrag im DBGrid einen Doppelklick. Dann erscheint ein neues Fenster wieder mit einem DBGrid aber nur mit dem eben angeklickten Eintrag. Und unter dieses DBgrid soll jetzt mein Bild angezeigt werden was genau zu diesem Eintrag passt.

DeddyH 7. Okt 2007 16:07

Re: Bild über TImage aus der Datenbank holen?
 
Delphi-Quellcode:
DBGrid.DataSource.Dataset.FieldByName('Pfad').AsString

Jack23 7. Okt 2007 16:09

Re: Bild über TImage aus der Datenbank holen?
 
Es soll aber trotzdem noch als TImage angezeigt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:56 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