![]() |
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? |
Re: Bild über TImage aus der Datenbank holen?
Hier mal ein Beispiel aus einem Testprojekt von mir (deshalb die blöden Bezeichner):
Delphi-Quellcode:
[edit] Oder ist nur der Pfad in der DB abgelegt? [/edit]
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; |
Re: Bild über TImage aus der Datenbank holen?
Es ist nur der Pfad in der DB abgelegt.
|
Re: Bild über TImage aus der Datenbank holen?
dann
Delphi-Quellcode:
Image.picture.LoadFromFile(DateinameAusDatenbank);
|
Re: Bild über TImage aus der Datenbank holen?
Das ist doch viel einfacher.
Delphi-Quellcode:
Getippt und nicht getestet.
//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; |
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.
|
Re: Bild über TImage aus der Datenbank holen?
War mir auch gerade aufgefallen, aber Du warst schneller, bevor ich editieren konnte ;)
|
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:
Nach dieser Abfrage werden die Daten in einem neuem Fenster, in einem DBGrid angezeigt.
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; neben diesem DBgrid befindet sich das TImage. Wie bekomme ich die Daten von der oben genannten Abfrage mit deinem Code in das TImage? |
Re: Bild über TImage aus der Datenbank holen?
Betreibe doch einfach einen Wissenstranfer und ersetzte Query durch ADOQuery1
|
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; |
Re: Bild über TImage aus der Datenbank holen?
Wenn das Feld 'Pfad' heißt: Ja
|
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"
|
Re: Bild über TImage aus der Datenbank holen?
Hast du die Variable deklariert?
|
Re: Bild über TImage aus der Datenbank holen?
Ich habe nur den Code eingebaut wie er oben steht. Wie Variable Definieren?
|
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. |
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:
Wie definiere ich die Variable Pfad?
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; |
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:
Außerdem fehlte das begin
procedure TForm9.test(Sender: TObject);
var Pfad: string; begin //Auslesen des Pfades Pfad :=ADOQuery1.FieldByName('Pfad').AsString; |
Re: Bild über TImage aus der Datenbank holen?
Hast Du den Verlauf den Threads nicht gelesen?
Delphi-Quellcode:
[edit] begin und Einrückungen hinzugefügt [/edit]
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; |
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?
|
Re: Bild über TImage aus der Datenbank holen?
Hast Du denn eine ADOQuery auf dem Formular?
|
Re: Bild über TImage aus der Datenbank holen?
Nein die ist auf einem anderen. Das mit der ADOQuery1 ist aber oben unter uses eingebunden.
|
Re: Bild über TImage aus der Datenbank holen?
Dann lautet die Syntax auch
Delphi-Quellcode:
AnderesForm.AdoQuery1
|
Re: Bild über TImage aus der Datenbank holen?
Dann kannst du dieses mit
Delphi-Quellcode:
ansprechen
<Formname>.ADOQuery1
|
Re: Bild über TImage aus der Datenbank holen?
Ha, einmal schneller als mkinzler gewesen :zwinker:
|
Re: Bild über TImage aus der Datenbank holen?
Ich würde mal sagen, gleichschnell
|
Re: Bild über TImage aus der Datenbank holen?
Vermutlich hatten wir deshalb beide keinen roten Kasten.
|
Re: Bild über TImage aus der Datenbank holen?
So habe ich das jetzt gemacht.
Delphi-Quellcode:
jetzt kommt aber diese Meldung
Form2.ADOQuery1.FieldByName
Form2 enthält keine Element namens ADOQuery1 edit erledigt. nur ein kleiner tippfehler. |
Re: Bild über TImage aus der Datenbank holen?
Du solltest dich trotzdem mal den Grundlagen zuwenden.
|
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. |
Re: Bild über TImage aus der Datenbank holen?
Lass Dir mal ExtractFilePath(ParamStr(0)) ausgeben ;)
|
Re: Bild über TImage aus der Datenbank holen?
Den Paf der Exe kannst du mit
Delphi-Quellcode:
ermitteln
ExtractFilePath (ParamStr(0));
|
Re: Bild über TImage aus der Datenbank holen?
:bouncing4: Noch einmal und ich mach den Sekt auf :bounce1:
|
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:
Und das Bild liegt in C:\test.jpg
Image1.Picture.Graphic.LoadFromFile(Form2.ADOQuery1.FieldByName('Pfad').AsString);
|
Re: Bild über TImage aus der Datenbank holen?
Ist denn die Datenmenge geöffnet?
|
Re: Bild über TImage aus der Datenbank holen?
Ich habe gerade überlegt. Kann ich statt der ADOQuery1 auch eine DataSource nutzen?
|
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)
|
Re: Bild über TImage aus der Datenbank holen?
Du bräuchtest ein Dataset, und eine Query ist so eins.
|
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. |
Re: Bild über TImage aus der Datenbank holen?
Delphi-Quellcode:
DBGrid.DataSource.Dataset.FieldByName('Pfad').AsString
|
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 14:48 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