Hallo,
Kaischi hat folgendes geschrieben: |
Ich benötige bis zum 28.8. ein optimales programm mit dem man in einer tabelle suchen und filtern kann. |
Etwas Optimales gibt es nicht. Die mächtigste suchfunktionalitäten kannst du sicherlich per SQL implementieren. In der Schule habt ihr sicherlich ein paar Ramenbedingungen bekommen die euch Zeigen welche funktionalität ihr verwenden sollt.
Kaischi hat folgendes geschrieben: |
also eine optimale suchfunktion!!!!!!!!!!!!
Mit allem was dazu gehört.
wie z.B.: groß und kleinschreibung usw. |
Also wie gesagt, ich würde die
Structured
Query
Language verwenden. Suchen bzw. Filtern tut man in dieser über das
SELECT Statement. Da ich hir jetzt nicht die Zeit habe dir SQL zu erklären müssen ein paar Beispiele herhalten:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| // Ein Tabelle vollständig anzeigen: SELECT * FROM Tabelle
// Alle Datensätze anzeigen bei denen der Nachmane Meier ist: SELECT * FROM Tabelle WHERE Nachname='Meier'
// Alle Dantensätze anzeigen bei denen der Nachname nicht Meier ist SELECT * FROM Tabelle WHERE NOT (Nachname='Meier)
// Alle Meiers und Müllers ausgeben SELECT * FROM Tabelle WHERE (Nachname='Meier') OR (Nachname='Müller')
// Alle Datensätze Anzeigen Bei denen der Vormame Heinz und der Nachname Meier ist: SELECT * FROM Tabelle WHERE (Vorname='Heinz')AND (Nachname='Meier')
// Alle Datensätze raussuchen bei denen der Nachmane mit M beginnt: SELECT * FROM Tabelle WHERE Nachname LIKE 'M%'
// Alle Meiers raussuchen dabei groß und kleinschreibung ignorieren: SELECT * FROM Tabelle WHERE UPPER(Nachname)='MEIER'
// Alle Datensätze anzeigen und nach Nachnamen und Vornamen Sortieren: SELECT * FROM Tabelle ORDER BY Nachname, Vorname |
Aber wahrscheinlich willst du deinen user keine (mehr oder weniger) komplizieren SQL Statements eingeben lassen. Dennoch kannst du hinter den kuliisen damit arbeiten.
Wenn du dir die ganzen Beispiele anschaust, erkennst du, dass die Filterregel in der WHERE Zeile steht. Desweiteren siehst du das mehere bedingungen in die Where Klausel mit
AND,
OR und
NOT miteinander verküpft werden können.
Du kannst einzelne bedingungen recht einfach über Comboboxen und editfelder eingeben lassen. Z.b. so: Du hast eine Combobox über welche die zu Filternden Spalten ausgewählt werden können (z.B: Nachname und Vorname). Dann hast du noch ein Edit Feld in welches man den Wert eingeben kann. Der Benuzter wählt also in der Combobox "Nachname" aus und gibt in das Edit Feld "Meier" ein. Sobald der Benutzer jetzt auf den Knopf filtern drückt musst du eine Klausel draus machen in unserem einfachen Beispiel sieht das so aus.
Quelltext
1:
| ActKlausel := '(' + ComboBox1.Text + '=''' + Edit1.Text + ''')'; |
Damit hast du die Aktuelle Klausel, jetzt must du diese mit bereits vorhandenen Klauseln verbinden, da du diese ja schon in einem String hast (als bestandteil deines Querys) brauchst du sie eigentlich nur dahinter hängen.
Der übersichtlichkeit halbe gehe ich davon aus, dass du einen Objektglobalen String mit der Bezeichnung WhereStr definiert hast. Dieser ergibt die dritte Zeile in deinem Query. Was jetzt folgt ist die OnClick Methode für den oben beschriebenen Filtern-Knopf:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.butFilternClick(Sender: TObject); VAR ActKlausel : STRING; begin Query1.close; Query1.sql.Clear; Query1.sql.Add('SELECT *'); Query1.sql.Add('FROM MeineTabelle'); IF (Combobox1.Text<>'') AND (Edit1.Text<>'') THEN BEGIN ActKlausel := '(' + ComboBox1.Text + '=''' + Edit1.Text + ''')'; IF WhereStr='' THEN // Wenn noch kein Filter gesetzt ist WhereStr := 'WHERE ' ELSE // Aktuelle klausel mur mit bestehender verbunden werden WhereStr := WhereStr + ' AND '; WhereStr := WhereStr + ActKlausel END; // Filterregel eingegeben Query1.sql.Add(WhereStr); Query1.open; end; |
Und damit du auch weißt was mit Query1 gemeint ist solltest du mal in dieses
Tutorial gucken.
So, ich denke das sollte für's erste reichen.
Viel Spass damit
Klabautermann