![]() |
pfad eines jpg´s aus einer datenbank anzeigen
Hallo,
ich hab ein kleines programm, wo bilder oder besser gesagt nur der Pfad der Bilder in einer Datenbank abgespeichert werden. die bilder haben das format .JPG. alles funtioniert, bild öffnen, pfad speichern, allerdings weiß ich nicht wie ich das bild anzeigen lassen kann. was soll ich benutzen DBImage oder TImage oder irgendwas anderes?? mein quelltext sieht so aus.
Delphi-Quellcode:
unit Unit1;
interface uses Jpeg, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls, StdCtrls, Mask, DB, DBTables, ExtDlgs; type TForm1 = class(TForm) DBEdit1: TDBEdit; Button1: TButton; DBNavigator1: TDBNavigator; DataSource1: TDataSource; Table1: TTable; OpenPictureDialog1: TOpenPictureDialog; Button2: TButton; Image1: TImage; Label1: TLabel; DBImage1: TDBImage; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); begin If OpenPictureDialog1.Execute then Begin Table1.Edit; Table1.FieldbyName('Bild').AsString:=OpenPictureDialog1.Filename; Table1.Post; End; end; end. also wer kann mir sagen, was ich machen muß und welchen quelltext ich evlt. irgendwo einfügen muß? ich weiß echt nicht mehr weiter, wie ich das machen soll. vielen vielen dank schon mal gruß vamp79 [Edit=FuckRacism]Delphi-Tags; Absofort code bitte in Tags setzten mit [*delphi] [/*delphi] ( ohne *)[/Edit] |
Hi !
Zitat Delphi-Hilfe (DBImage): "TDBImage repräsentiert eine BLOB-Grafik an, die in einem Feld des aktuellen Datensatzes einer Datenmenge gespeichert ist." D.h. dass, um diese Kompo zu benutzen das Bild tatsächlich in der DB stehen muß, und nicht nur der Pfad. Wenn Du nur einen Pfad abspeicherst, dann solltest Du ein TImage nehmen: Image1.Picture.Filename:='xyz.jpg'; Hängst Du diesen Aufruf an das OnDataChange-Ereignis deiner DataSource, dann wird immer das zum Datensatz gehörende Bild angezeigt ! Gruß, Helld; |
da stimmt irgendwas nicht, oder ich hab was falsch gemacht.
es kommt immer ein fehlermeldung
Delphi-Quellcode:
unit Unit1;
interface uses Jpeg, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBTables, StdCtrls, Mask, DBCtrls, ExtCtrls, ExtDlgs; type TForm1 = class(TForm) DataSource1: TDataSource; Table1: TTable; DBNavigator1: TDBNavigator; DBEdit1: TDBEdit; OpenPictureDialog1: TOpenPictureDialog; Button1: TButton; Image1: TImage; Label1: TLabel; Bevel1: TBevel; procedure Button1Click(Sender: TObject); procedure Image1Click(Sender: TObject); procedure DataSource1DataChange(Sender: TObject; Field: TField); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin If OpenPictureDialog1.Execute then Begin Table1.Edit; Table1.FieldbyName('Bild').AsString:=OpenPictureDialog1.Filename; Table1.Post; End; end; procedure TForm1.Image1Click(Sender: TObject); begin Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName ); end; procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); begin Image1.Picture.Filename:=''xyz.jpg'; end; end. ich versteh das nicht... :oops: was muß ich machen, damit die komponente (TImage) auf die datenbank zugreift und mir anhand des pfades das bild anzeigt. vielen dank schon mal vamp79 [Edit=FuckRacism]Delphi-Tags[/Edit] |
Sorry, mein Fehler !
Die Zeile --> Image1.Picture.Filename:=''xyz.jpg'; muß natürlich folgendermassen lauten: Image1.Picture.LoadFromFile:=Table1.FieldbyName('B ild').AsString Gruß, Helld; |
ich bekomm allerdings da wo das sternchen (*) ist immer noch einen fehler
Image1.Picture.LoadFromFile:=(*)Table1.FieldbyName ('Bild').AsString die klammer und das sternchen stehen natürlich nicht im quellcode. im quellcode sieht das so aus: Image1.Picture.LoadFromFile:=Table1.FieldbyName('B ild').AsString kennst duzu evtl auch noch eine lösung? |
Moin Vamp,
wenn ich jetzt gemein wäre könnte ich Dir ja als Lösung des Problemes mal die Taste F1 vorschlagen ;-) Wenn die Zeile so aussieht
Delphi-Quellcode:
müsste es eigentlich gehen.
Image1.Picture.LoadFromFile(Table1.FieldbyName('Bild').AsString);
|
Hi,
es macht auch Sinn, vorher abzufangen, ob das Bild überhaupt existiert:
Delphi-Quellcode:
Außerdem, ich habe nun schön länger nicht mehr den Event OnDataChange der DataSource benutzt. Grund: das Ereignis OnDataChange tritt für jeden Datensatz der Datenmenge ein, sobal diese aktiviert wird. Man kann das natürlich über Flags kontrollieren, das macht die Programmierung aber unübersichtlich. Ich nutze daher lieber das OnChange Ereignis des datenanzeigenden Objects (z.B. Grid).
if FileExists(Table1.FieldbyName('Bild').AsString) then
Image1.Picture.LoadFromFile(Table1.FieldbyName('Bild').AsString); Hat dieses Objekt die Ereignisse MouseUp und KeyUp, favorisiere ich sogar diese, da man dann durch Gedrückthalten der Cursortasten schneller durch die Datensätze scrollen kann, denn nur beim Loslassen von Mous-, Cursortaste/ laufen die entsprechenden Aktualisierungen ab. gruß, harry |
Ihr habt natürlichr echt, muss ...LoadFromFile(...); heissen. Hätte mal lieber in die Hilfe schauen sollen, war aber nur aus dem Kopf.
Man muss ja nicht alles wissen, man muss nur wissen, wo es steht (und dann natürlich auch nachschauen :-)) Gruß, Helld; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 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