# In einer bestimmten Spalte suchen mit Suchfeld (MS SQL)



## Java_Noob_12345 (11. Mrz 2020)

Hallo miteinander,

wer sich noch an meinen letzten Beitrag erinnert, weiß, dass ich an einem Programm arbeite welches die Tabellen einer Datenbank in einem tableView aufruft. Falls nicht hier eine kleine Erinnerung:



Nun möchte ich gerne ein Suchfeld einbauen, welches eine ausgewählte Spalte durchsuchen kann. Hier mal zwei Dummy Beispiele:




Im Dummy habe ich es per textField KeyEvent mit Cases eingebaut. (Siehe Bild)



Ist zwar noch in Ordnung bei nur zwei Tabellen aber für 100 oder mehr ist das keine gute Lösung. Wie könnte ich vorgehen, wenn ich besonders viele Tabellen habe aber diese Suchfunktion unbedingt einbauen möchte?

MFG euer Java_Noob_12345


----------



## Thallius (11. Mrz 2020)

Nur mal so als Tipp. Warum muss sich der Arme User erst mit den Select Felder rumquälen wenn in den Spalten doch i.d.R nichts vergleichbares drin steht. Lass den Quatsch doch einfach weg und mach nur ein Suchfeld das über alle Spalten sucht. Ist viel einfach für den User und auch für dich.


----------



## Java_Noob_12345 (11. Mrz 2020)

Thallius hat gesagt.:


> Nur mal so als Tipp. Warum muss sich der Arme User erst mit den Select Felder rumquälen wenn in den Spalten doch i.d.R nichts vergleichbares drin steht. Lass den Quatsch doch einfach weg und mach nur ein Suchfeld das über alle Spalten sucht. Ist viel einfach für den User und auch für dich.



In einer realistischen Datenbank viel mehr Spalten als 3. Können 20, 30 oder mehr Spalten sein. Wenn ich da was bestimmtes suchen würde z.B. nach einer Kundennummer etc. würden mir tausende weitere Einträge gezeigt worin man dann "Findet Waldo" spielen muss.

Beispiel einer "realistischen" Datenbank:


----------



## kneitzel (11. Mrz 2020)

Also für ein Refactoring könnte ich mit vorstellen, dass Du da entweder ein Enum aufbaust, dass eben Name und Predicate beinhaltet oder man packt es in eine HashMap.

Wenn man es in eine HashMap packt, dann wäre die Überlegung, ob man sich diese dynamisch über Reflection aufbaut. 

Aber in beiden Fällen wäre denn die Prüfung nur, dass man sich das Predicate holt und dann anwendet.

Wobei Du dann in Deinem Code Auto und Bier zusammen gewürfelt hast. Das dürfte so in der Praxis nicht sein, oder?


----------



## Thallius (11. Mrz 2020)

Java_Noob_12345 hat gesagt.:


> In einer realistischen Datenbank viel mehr Spalten als 3. Können 20, 30 oder mehr Spalten sein. Wenn ich da was bestimmtes suchen würde z.B. nach einer Kundennummer etc. würden mir tausende weitere Einträge gezeigt worin man dann "Findet Waldo" spielen muss.



Und dann willst du dem User zumuten in einem Select mit 30 Einträgen den richtigen zu wählen? Sorry aber ihr solltet euch echt mal Gedanken über Useaility machen. Sowas will doch keiner Bedienen...


----------



## Java_Noob_12345 (11. Mrz 2020)

Thallius hat gesagt.:


> Und dann willst du dem User zumuten in einem Select mit 30 Einträgen den richtigen zu wählen? Sorry aber ihr solltet euch echt mal Gedanken über Useaility machen. Sowas will doch keiner Bedienen...


Das Suchfeld funktioniert auch ohne ComboBox. Wenn der Nutzer diese nicht benutzen möchte muss er es ja nicht. Suchen kann man ganz normal. Nur werden dann eben alle Reihen angezeigt, die den gesuchten Begriff enthalten.
Tabelle:"Du suchst die Palette Nr 1? Tja Pech gehabt ich liste dir jetzt alle Reihen auf, die eine 1 enthalten. Die richtige Reihe musst du dann selbst suchen."

Könnte man durch "matches" ändern sodass nur noch die Reihen, die exakt der Eingabe entsprechen, angezeigt werden. Finde ich persönlich nicht so toll, da dann während der Eingabe alle Reihen verschwinden, weil sie logischerweise nicht den Daten in der Tabelle entsprechen.

Die ComboBox sollte die Reihen besser filtern können. Wenn ich nach der Kundennummer, oder was auch immer, suche dann sollen gefäligst auch nur die Kundennummern durchsucht werden.


----------



## kneitzel (11. Mrz 2020)

Thallius hat gesagt.:


> Und dann willst du dem User zumuten in einem Select mit 30 Einträgen den richtigen zu wählen? Sorry aber ihr solltet euch echt mal Gedanken über Useaility machen. Sowas will doch keiner Bedienen...


Dem gebe ich Recht. Wobei ich die Lösung gut finde, dass Benutzer sich heraus suchen können, auf welchen Feldern sie suchen wollen und diese Auswahl dann speichern können.

Aus Sicht der Usability ist auch schon eine Tabelle mit 30 Spalten Schwachsinn. Die wird man auch kaum angezeigt bekommen. Da ist dann also entweder eine gute Vorauswahl wichtig oder man macht es dynamisch: Der User kann auswählen, welche Felder für ihn wichtig sind. Dann bastelt sich jeder User das so zurecht, wie er es für seinen Aufgabenbereich benötigt. (Wobei eine Mischung wichtig ist, also erst die gute Vorauswahl und dann können "Experten"/"Power User" sich das auch noch anpassen.

Früher hatten wir oft auch einfach eine "Filter row" unter den Überschriften. Da konnte man dann auch gezielt filtern. Aber auch das habe ich so als nicht wirklich gut benutzbar in Erinnerung.

Gerade bei den Web Frameworks gibt es dafür ja die eine oder andere Lösung. Wobei ich Lösungen nicht gut finde, die das alles Client-Seitig machen. Da hatten wir dann schon Seiten, die dann erst paar Sekunden geladen haben um dann im JavaScript das sortieren und filtern zu machen was aber dann für den Benutzer um 1 Minute Wartezeit bedeutete  Aber das ist auch schon um 10 Jahre her und da hat sich ja zu, Glück extrem viel getan!


----------



## lam_tr (11. Mrz 2020)

Java_Noob_12345 hat gesagt.:


> Hallo miteinander,
> 
> wer sich noch an meinen letzten Beitrag erinnert, weiß, dass ich an einem Programm arbeite welches die Tabellen einer Datenbank in einem tableView aufruft. Falls nicht hier eine kleine Erinnerung:
> 
> ...



Was hälst du von controlsfx TableFilter? Dabei muss du nicht mal viel implementieren und ist dynamisch. Funktioniert für jede Spalte und setzt die Predicates zusammen.

Für 3 Zeilen Code Aufruf ist das schon sehr cool.


----------

