![]() |
Datenbank: Access • Zugriff über: Microsoft.Jet.OLEDB.4.0
Filterkriterium in Datenbank
Liste der Anhänge anzeigen (Anzahl: 1)
Servus Leute!
Bin gerade dabei, die Filterfunktion innerhalb von Datenbanken kennenzulernen. Hab' schon einige Möglichkeiten ausprobiert, doch keine scheint zu funktionieren. Der Filter sollte so funktionieren: Wenn ich eine Musikkategorie auswähle, werden mir die dazugehörigen Lieder bzw. Musikstücke präsentiert. Wähle ich nun jedoch auf der rechten Seite einen Komponisten aus, sollen nur Stücke dieses Interpreten angezeigt werden. Hier wäre einmal der Delphi-Code:
Delphi-Quellcode:
Ich hoffe, dass ihr mir hierbei weiterhelfen könnt.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ADODB, DB, ComCtrls, StdCtrls; type TForm1 = class(TForm) ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; ADOTable1: TADOTable; TreeView1: TTreeView; ListView1: TListView; ListBox1: TListBox; procedure FormShow(Sender: TObject); procedure TreeView1Change(Sender: TObject; Node: TTreeNode); private function DatenverbindungHerstellen(): boolean; procedure FillTreeview; procedure FillListbox; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure Tform1.FillTreeview; var Node: TTreenode; begin //Bereits vorhandene Knotenelemente (Items) werden gelöscht: Treeview1.items.clear; ADOQuery1.close; ADOQuery1.SQL.clear; ADOQuery1.SQL.Add('Select * from MVO_Sparten'); ADOQuery1.Open; While not ADOQuery1.Eof do begin Node := Treeview1.items.add(nil,ADOQuery1.FieldValues['Sparten_Bezeichnung'] + ' (' + ADOQuery1.FieldValues['Sparten_Abkürzung'] + ')'); Node.ImageIndex := 0; // Verwende ich zum Speichern der Tabellen-ID je Knotenelement: Node.StateIndex := ADOQuery1.FieldValues['Spartennummer']; ADOQuery1.Next; end; AdoQuery1.Close; end; procedure Tform1.FillListbox; begin Listbox1.items.clear; ADOQuery1.close; ADOQuery1.SQL.clear; ADOQuery1.SQL.Add('Select * from MVO_Notenverzeichnis'); ADOQuery1.Open; While not ADOQuery1.Eof do begin Listbox1.Items.add(ADOQuery1.FieldValues['Komponistnachname']) ; ADOQuery1.Next; end; Adoquery1.close; end; procedure TForm1.FormShow(Sender: TObject); begin Datenverbindungherstellen(); Filltreeview(); Filllistbox(); end; procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode); var LI: TListitem; begin Listview1.items.clear; ADOQuery1.close; ADOQuery1.SQL.clear; ADOQuery1.SQL.Add('Select * from MVO_Notenverzeichnis where Spartennummer = ' + inttostr(Node.stateindex)); ADOQuery1.Open; While not ADOQuery1.Eof do begin LI := Listview1.items.add; LI.caption := ADOQuery1.FieldValues['Name']; // LI.subitems.add(ADOQuery1.FieldValues['PR_Bezeichnung']); ADOQuery1.Next; end; AdoQuery1.Close; end; function tform1.DatenverbindungHerstellen(): boolean; var Provider, DataProvider, DataSource: string; begin Provider := 'MSDataShape.1'; DataProvider := 'Microsoft.Jet.OLEDB.4.0'; DataSource := extractfilepath(application.ExeName) + 'MVerein.mdb'; if fileexists(DataSource) then begin if ADOConnection1.Connected then ADOConnection1.Close; ADOConnection1.ConnectionString := 'Provider=' + Provider + ';Data Provider=' + DataProvider + ';Data Source=' + DataSource; try ADOConnection1.Connected := true; result := true; except result := false; end; end else begin result := false; end; end; end. Danke schonmal jetzt im Voraus für eure Hilfe. Grüße Christoph |
Re: Filterkriterium in Datenbank
Zitat:
|
Re: Filterkriterium in Datenbank
Servus jaenicke!
Ich hab's wieder entfernt. Hab' einiges versucht, doch immer wieder sind Fehlermeldungen gekommen. Ich weiß nur soviel, dass man folgenden SQL-Code verwenden soll:
SQL-Code:
Hierbei würden alle Musikstücke innerhalb einer bestimmten Kategorie von Bach ausgewählt.
"SELECT MVO_Notenverzeichnis.Name, MVO_Notenverzeichnis.KomponistNachname
FROM MVO_Notenverzeichnis WHERE (((MVO_Notenverzeichnis.KomponistNachname)="Bach"));" Jedoch sollte dieser Code variabel sein. Wenn ich in der Listbox zB Mozart auswähle, sollen alle Stücke von Mozart innerhalt einer bestimmten Kategorie angezeigt werden. Leider weiß ich nicht ganz, wie man dies am besten machen kann. ![]() Grüße Christoph |
Re: Filterkriterium in Datenbank
Als Stichwort für die Forensuche seien hier
![]() |
Re: Filterkriterium in Datenbank
Danke für den Hinweis, aber das hilft mir auch nicht so wirklich weiter
|
Re: Filterkriterium in Datenbank
Und wieso nicht?
Delphi-Quellcode:
Query.SQL.Text := 'SELECT * FROM Tabelle WHERE Feld = :wert';
Query.ParamByName('wert').Value := 'Bach'; //oder Mozart, Beethoven, etc. Query.Open; |
Re: Filterkriterium in Datenbank
Danke für deine rasche Antwort.
In der Listbox sind viele Komponisten eingetragen. Wenn ich auf einen Wert (Komponistenname) in der Listbox klicke, sollen die Werke vom Komponisten in einem Listview in der Mitte erscheinen. Kann sein, dass ich es ein wenig verwirrend erklärt habe. - Bin ja ein Newbie :) Hier wäre mal mein Ansatz bezüglich der Listbox:
Delphi-Quellcode:
Grüße Christoph
procedure Tform1.FillListbox;
begin Listbox1.items.clear; ADOQuery1.close; ADOQuery1.SQL.clear; ADOQuery1.SQL.Add('Select * from MVO_Notenverzeichnis'); ADOQuery1.Open; While not ADOQuery1.Eof do begin Listbox1.Items.add(ADOQuery1.FieldValues['Komponistnachname']) ; ADOQuery1.Next; end; Adoquery1.close; adoquery1.SQL.Clear; adoquery1.sql.add('SELECT MVO_Notenverzeichnis.Name, MVO_Notenverzeichnis.KomponistNachname FROM MVO_Notenverzeichnis WHERE MVO_Notenverzeichnis.KomponistNachname=' +listbox1.Selected.item); adoquery1.ExecSQL; end; |
Re: Filterkriterium in Datenbank
Warum keine DBLookupListBox?
|
Re: Filterkriterium in Datenbank
Und wieso alle Daten abfragen, wenn man nur den Namen will? Außerdem werden Abfragen (SELECT) mit Open geöffnet und nicht mit ExecSQL.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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 by Thomas Breitkreuz