Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Bilder aus Datenbank (nur pfad) anzeigen.. (https://www.delphipraxis.net/42317-bilder-aus-datenbank-nur-pfad-anzeigen.html)

SKolberg 17. Mär 2005 09:12

Datenbank: MySQL auf Linux • Version: 4.0.22 • Zugriff über: ZeosLib

Bilder aus Datenbank (nur pfad) anzeigen..
 
Hallo,
Ich habe ein MySQL Server dort sind in einer tabelle Artikel hinterlegt in einer anderen die Bilder dazu, weil es mehrere Bilder geben kann
habe ich den PrimaryKey in die bilder DB mit eingefügt damit er zu [(Artikel1; Id 10) (Id 10 = Bild 1; Bild 2; ....)] abrufen soll.
Nun habe ich 2 Probleme,
1. Wie zeige ich die Bilder die in der DB nur als Pfad hinterlegt sind in einem DBImage an??
2. Wie Bringe ich ihm bei die Bilder der Artikelzugehörigkeit nach anzuzeigen da es ja mehrere geben kann,
dazu müssen sie ja gefiltert werden bzw. müsste man sie über einen DBNavigator witerblättern können..oder?


Danke im voraus, Steve

Stevie 17. Mär 2005 09:15

Re: Bilder aus Datenbank (nur pfad) anzeigen..
 
Dürfte so nicht gehen. Du musst ein "normales" TImage" nehmen, und das Bild über den Pfad aus dem DB-Feld dort reinladen.
Alternativ mit einer ImageList arbeiten und einen eigenen "Blätter"-Algorithmus schreiben.

SKolberg 17. Mär 2005 09:22

Re: Bilder aus Datenbank (nur pfad) anzeigen..
 
Hast du da vielleicht ein paar tips bzw. links die ich mir anschauen kann? Bin ziemlicher newbie in Delphi.

Danke

Stevie 17. Mär 2005 09:32

Re: Bilder aus Datenbank (nur pfad) anzeigen..
 
2 Datenmengen (Artikel, Bilder) über die ID verknüpfen (siehe Delphi OH)
Dann hast du beim Blättern in der Artikelmenge immer in der Detail-Menge die Bilder für den gewählten Artikel.
In das AfterScroll-Event der Bildermenge fügst du dann ein
Delphi-Quellcode:
ArtikelImage.Picture.LoadFromFile(BilderDataSet.FieldByName('BildPfad').AsString)
ein und verbindest nen Navigator mit deiner Bilder-Datenmenge.

SKolberg 15. Jul 2005 08:46

Re: Bilder aus Datenbank (nur pfad) anzeigen..
 
So ich habe jetzt mal einiges hier probiert allerdings komme ich trotz alledem nicht wirklich weiter...

Ich habe auf dem Form ein TDBEdit (IDNr) in dem steht die ID aus der Tabelle Datenblatt, nun soll er mir alle Sätze aus der Tabelle Produktinfos auflisten die die ArtikelNr = IDNr haben. Ich habe schon versucht einen TDBGrid mit Filter zu benutzen allerdings (so scheint mir) kann ich den Filter nur auf eine Tabelle beschränken und ihm nicht sagen Filter: ArtikelBez = IdNr.Text. :gruebel:

In der Tabelle Produktinfos sind 3 Felder:
ID = Primqry Key
Bild = Vollständiger Pfad der Bilder
ArtikelBez = ID des Datensatzes aus Tabelle Datenblatt

Letzendlich soll er mir alle Pfade in die Listbox laden die als ArtikelBez die Zahl der IDNr.Text haben da es zu einem Produkt mehrere Bilder geben kann. Alternativ sollte er die Pfade direkt in eine Imagelist laden damit ich sie in einem TImage anzeigen lassen kann...

Den letzten Code den ich probiert habe war der:

Delphi-Quellcode:
procedure TDatenn.OnChangePage(Sender:TObject);
begin
    ImageList1.Clear;
    ListBox1.Clear;

    SDIAppForm.ZQuery1.SQL.Text :='SELECT * FROM produktinfos WHERE ArtikelNr = :Bilder';
    SDIAppForm.ZQuery1.ParamByName('Bilder').AsString:=IDNr.Text;
    SDIAppForm.ZQuery1.Open;
    ListBox1.Items.Add(SDIAppForm.ZQuery1.SQL.Text);
end;
Bei diesem Code bekomme ich allerdings eine Fehlermeldung "Field 'Berechtigungen' not found" das Feld Berechtigungen ist aber in der Tabelle User die ich hier meines wissens nach nicht anspreche. :wall:


Mfg, Steve

SKolberg 18. Jul 2005 08:12

Re: Bilder aus Datenbank (nur pfad) anzeigen..
 
Ich habe am WE nochmal nachgeguckt allerdings schein er den Param nicht anzunehemn zumindest sehe ich ihn nicht auf dem Hauptformular, also habe ich einen neuen ZQuery aufs Datenblatt genommen. Den Param nimmt er auch an allerdings bekomme ich keine Einträge in die ListBox.


Keiner einen Vorschlag?


Mfg, Steve

Sharky 18. Jul 2005 09:10

Re: Bilder aus Datenbank (nur pfad) anzeigen..
 
Hai SKolberg,

zu erst einmal wegen deiner Fehlermeldung:
Kann es sein das Du bei deinem SDIAppForm.ZQuery1 über den FeldEditor (rechter Mausklick auf die Query-Kompo) Felder aus einer anderen Tabelle zugewiesen hast? Das ist nämlich ein typischer Fehler.

Unabhängig davon wäre es zu überlegen ob Du dein Tabellendesign änderst.
Wenn ich dein Eingangsposting richtig verstehe speicherst Du alle Bilder zu einem Artikel in einem Eintrag der Tabelle produktinfos. Das würde ich auf keinen Fall machen.

Es gibt zwei Möglichkeiten.

1:n Relation (Es gibt n Bilder zu einem Artikel)
Code:
[b]artikel[/b]
---------------------
ID       - integer (PrimaryKey)
.
.

[b]produktinfos[/b]
---------------------
ID       - integer (PrimaryKey)
fk_art_id - integer (Forenkey -> artikel.ID)
bild     - string (Bildname)
Ich würde aber, um eine einfache Erweiterung des Programmes vornehmen zu können eine n:m Relation aufbauen. Dafür wird alledings eine dritte Tabelle benötigt:
Code:
[b]artikel[/b]
---------------------
ID       - integer (PrimaryKey)
info     - string
.

[b]produktinfos[/b]
---------------------
ID       - integer (PrimaryKey)
bild     - string (Bildname)

[b]art_prod_info[/b]
---------------------
fk_artikel_id - integer (ForenKey -> artike.ID)
fk_prodinf_id - integer (ForenKey -> produktinfos.ID)
Dadurch hast Du die Möglichkeit das selbe Bild verschiedenen Artikel zuordnen zu können.

SKolberg 18. Jul 2005 11:31

Re: Bilder aus Datenbank (nur pfad) anzeigen..
 
Danke erstmal,

Müsste ich nicht wenn ich Die Tabelle ändere, die Sätze neu eingeben? Wenn ja wäre das jetzt im nachhinein etwas
sch**** die DB läuft schon seit ca. 1 Jahr mittlerweile beträgt die Anz. der Artikel 7800 und zus. 4300 Bilder...
(Greife per MS Access drauf zu) dort bekomme ich es aber hin das er mir die Bilder, so wie sie jetzt sind richtig Filtert. Und das geht ziemlich schnell obwohl "Access + SQL = Schnarchnase" ergibt..

Ich meine wenns nun nicht anders geht würde ichs machen, aber bei den Datensätzen ist mir das etwas zu heikel zumal ich ALLE Bilder neu anlegen dürfte?!

Gibts da nicht die Möglichkeit sie so zu Filtern?

Filter: Where Daten_ID = Produktinfos_ArtikelBez??


Mfg, Steve

SKolberg 2. Sep 2005 12:57

Re: Bilder aus Datenbank (nur pfad) anzeigen..
 
Hi,

das mit der ImageList habe ich verworfen ich lasse die betreffenden Pfade zu den Bildern jetzt in eine ListBox laden und lade sie von da in ein TImage, allerding scheitert es daran das wenn ich mehr als ein bild habe er mir immer nur das erste anzeigt:

Delphi-Quellcode:
procedure TForm2.ClickNext(Sender: TObject);
begin
Image1.Picture.LoadFromFile(ListBox1.Items.Strings[0]);
Ich habe schon versucht mit (+ 1) zu arbeiten allerdings funktioniert das nicht...


Mfg, Steve

EDIT/ Für andere die es interessiert ich habe es so gemacht

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);

begin
    MainForm.ZQuery2.Close;
    MainForm.ZQuery2.SQL.Text := 'SELECT * FROM produktinfos WHERE ArtikelNr LIKE :ProduktID';
    MainForm.ZQuery2.ParamCheck := True;
    MainForm.ZQuery2.ParamByName('ProduktID').AsString;
    MainForm.ZQuery2.Open;
end;


procedure TForm2.ClickNext(Sender: TObject);
begin
Image1.Picture.LoadFromFile(ListBox1.Items.Strings[0]);

end;


procedure TForm2.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
    Anzahl.Caption:= '0';
    ListBox1.Clear;
    MainForm.ZQuery2.ParamByName('ProduktID').AsString:= DBEdit1.Text;
    MainForm.ZQuery2.Refresh;

begin

   while not MainForm.ZQuery2.eof do begin
     ListBox1.Items.Add(MainForm.ZQuery2.fieldbyname('Foto').AsString);
     MainForm.ZQuery2.Next;
     Anzahl.Caption:=IntToStr(ListBox1.Items.Count);
   end;

end;
end;

zelle 2. Sep 2005 13:07

Re: Bilder aus Datenbank (nur pfad) anzeigen..
 
Hallo

Zitat:

procedure TForm2.ClickNext(Sender: TObject);
begin
Image1.Picture.LoadFromFile(ListBox1.Items.Strings[0]);

end;
Wenn du immer 0 drinnen stehen hast liest do auch immer nur den 1 Pfad aus.

Versuche es mal so:
Delphi-Quellcode:

Globale Variable
var
i:Integer;

procedure TForm2.ClickNext(Sender: TObject);
begin
i:=i+1;
if i > ListBox1.Items.Count then
  i:= ListBox1.Items.Count-1;

Image1.Picture.LoadFromFile(ListBox1.Items.Strings[i]);

end;
mfg
Zelle


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz