Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi pfad eines jpg´s aus einer datenbank anzeigen (https://www.delphipraxis.net/2138-pfad-eines-jpg%B4s-aus-einer-datenbank-anzeigen.html)

vamp79 8. Jan 2003 17:20


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]

Helld_River 8. Jan 2003 17:50

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;

vamp79 8. Jan 2003 18:17

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]

Helld_River 8. Jan 2003 18:25

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;

vamp79 8. Jan 2003 18:50

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?

Christian Seehase 8. Jan 2003 21:01

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:
Image1.Picture.LoadFromFile(Table1.FieldbyName('Bild').AsString);
müsste es eigentlich gehen.

harrybo 9. Jan 2003 14:49

Hi,

es macht auch Sinn, vorher abzufangen, ob das Bild überhaupt existiert:
Delphi-Quellcode:
if FileExists(Table1.FieldbyName('Bild').AsString) then
  Image1.Picture.LoadFromFile(Table1.FieldbyName('Bild').AsString);
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).

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

Helld_River 9. Jan 2003 15:04

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