AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Filterkriterium in Datenbank

Filterkriterium in Datenbank

Ein Thema von Stocki1990 · begonnen am 19. Apr 2009 · letzter Beitrag vom 19. Apr 2009
Antwort Antwort
Stocki1990

Registriert seit: 26. Okt 2008
8 Beiträge
 
#1

Filterkriterium in Datenbank

  Alt 19. Apr 2009, 08:35
Datenbank: Access • Zugriff über: Microsoft.Jet.OLEDB.4.0
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:
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.
Ich hoffe, dass ihr mir hierbei weiterhelfen könnt.

Danke schonmal jetzt im Voraus für eure Hilfe.

Grüße Christoph
Angehängte Dateien
Dateityp: zip mverein_196.zip (54,9 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.414 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Filterkriterium in Datenbank

  Alt 19. Apr 2009, 09:02
Zitat von Stocki1990:
Hab' schon einige Möglichkeiten ausprobiert, doch keine scheint zu funktionieren.
Was funktioniert denn nicht und wo im Code ist das?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Stocki1990

Registriert seit: 26. Okt 2008
8 Beiträge
 
#3

Re: Filterkriterium in Datenbank

  Alt 19. Apr 2009, 09:42
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:
"SELECT MVO_Notenverzeichnis.Name, MVO_Notenverzeichnis.KomponistNachname
FROM MVO_Notenverzeichnis
WHERE (((MVO_Notenverzeichnis.KomponistNachname)=
"Bach"));"
Hierbei würden alle Musikstücke innerhalb einer bestimmten Kategorie von Bach ausgewählt.

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.

Bild des Layouts

Grüße Christoph
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.557 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Filterkriterium in Datenbank

  Alt 19. Apr 2009, 11:20
Als Stichwort für die Forensuche seien hier Hier im Forum suchenSQL-Parameter genannt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Stocki1990

Registriert seit: 26. Okt 2008
8 Beiträge
 
#5

Re: Filterkriterium in Datenbank

  Alt 19. Apr 2009, 12:35
Danke für den Hinweis, aber das hilft mir auch nicht so wirklich weiter
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.557 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Filterkriterium in Datenbank

  Alt 19. Apr 2009, 12:43
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Stocki1990

Registriert seit: 26. Okt 2008
8 Beiträge
 
#7

Re: Filterkriterium in Datenbank

  Alt 19. Apr 2009, 12:58
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:
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;
Grüße Christoph
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Filterkriterium in Datenbank

  Alt 19. Apr 2009, 13:15
Warum keine DBLookupListBox?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.557 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Filterkriterium in Datenbank

  Alt 19. Apr 2009, 13:20
Und wieso alle Daten abfragen, wenn man nur den Namen will? Außerdem werden Abfragen (SELECT) mit Open geöffnet und nicht mit ExecSQL.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz