Seite 1 von 1

(Solved) Suche mit Eingabe in einer Textbox?

Verfasst: Fr 31. Jan 2020, 10:48
von Libremiki
Eigentlich ein einfaches Problem.
Ich möchte in einer Textbox den Namen eines Artikels oder einen Teil davon eingeben. Im Table-Control sollen dann alle zutreffenden Artikel angezeigt werden. So wie in dem angefügten Screenshot.
Die Artikel sind in der Tabelle "Artikel" gespeichert. Gesucht werden soll im Feld "Artikelname".

Wie kann ich das ohne Makro lösen?

Re: Suche mit Eingabe in einer Textbox?

Verfasst: Fr 31. Jan 2020, 12:42
von RobertG
Hallo Libremiki,

Du brauchst eine Tabelle zum Filtern/Suchen. Diese Tabelle muss nur einen Datensatz speichern. Deshalb erstelle ich die immer mit einem Ja/Nein-Feld als Primärschlüsselfeld, starte die Tabelle einmal und setze den Primärschlüssel für den ersten Datensatz auf "Ja" (TRUE). Die Tabelle muss außerdem natürlich ein Feld enthalten, das den Suchbegriff speichern kann, bei Dir also 'SACH'.

Diese so erstellte Tabelle wird ein einem Formular beschreiben, das nur das eine Feld enthält. Das Formular ist so eingestellt, dass immer nur der Datensatz erscheint, der den Primärschlüssel auf TRUE stehen hat. Nur dieser Datensatz darf geändert werden.

Das Tabellenkontrollfeld, das in Deinem Formular weiter unten steht, muss in einem zweiten Formular liegen. Du öffnest am besten den Formularnavigator und erstellst dort neben dem Filterformular ein zweites Formular für die Tabelle.

Der Inhalt des zweiten Formulars wird über eine Abfrage gespeist:

Code: Alles auswählen

SELECT * FROM "Tabelle" 
WHERE LOWER("Artikel Name") LIKE '%'||(SELECT LOWER("Suchbegriff") FROM "Filter" WHERE "ID" = TRUE)||'%'
In dem zweiten Formular wird noch ein Button positioniert, der das Formular aktualisieren soll. Dieser Button wird am besten direkt neben das Eingabefeld für den Begriff gesetzt. Wechselst Du von der Sucheingabe auf diesen Button, so wird zuerst der Suchbegriff gespeichert und dann das andere Formular aktualisiert.

Willst Du alle Datensätze angezeigt bekommen, wenn kein Suchbegriff eingegeben wurde, so musst Du mit COALESCE die LIKE-Bedingung erweitern:

Code: Alles auswählen

SELECT * FROM "Tabelle" 
WHERE LOWER("Artikel Name") LIKE COALESCE('%'||(SELECT LOWER("Suchebegriff") FROM "Filter" WHERE "ID" = TRUE)||'%',LOWER("Artikel Name")) 
Steht auch alles im Base-Handbuch beschrieben.

Gruß

Robert

Re: Suche mit Eingabe in einer Textbox?

Verfasst: Fr 31. Jan 2020, 13:35
von Libremiki
Das nenne ich eine gute Anleitung! Danke. Das Base-Handbuch hatte ich zwar gelesen aber nicht verstanden.

Stand ist jetzt dass mein Eintrag im Textfeld in die Filter Tabelle geschrieben wird, der Button funktioniert. Nur wird im Tabellenkontrollfeld noch nichts angezeigt weil -

es noch eine Fehlermeldung im SQL Eintrag gibt. Muss ich noch herausfinden, bin aber zuversichtlich.

Re: Suche mit Eingabe in einer Textbox?

Verfasst: Fr 31. Jan 2020, 15:28
von RobertG
Hallo Libremiki,

wenn Du das Base-Handbuch bei dieser Fragestellung nicht verstanden hast wären mir konkrete Rückmeldungen lieb. Dann könnte ich das entsprechend verbessern.

Gruß

Robert

Re: Suche mit Eingabe in einer Textbox?

Verfasst: Sa 1. Feb 2020, 10:50
von Libremiki
Habe mein Problem gelöst. In
SELECT * FROM "Tabelle" WHERE LOWER("Artikel Name") LIKE '%'||(SELECT LOWER("Suchbegriff") FROM "Filter" WHERE "ID" = TRUE)||'%'

musste ich True auf FALSE setzen, jetzt filtert das Formular und zeigt alle Einträge die "Knie" enthalten an, also auch Kniegelenk oder Einachs-Kniegelenk.

Allerdings habe ich jetzt das Problem dass sich die Anzeige nur updated wenn ich das Formular schließe und wieder öffne. Funktioniert allerdings wenn der Button "Filter" im Hauptformular steht.

Re: Suche mit Eingabe in einer Textbox?

Verfasst: Sa 1. Feb 2020, 10:59
von Libremiki
Das Base-Handbuch habe ich mir sogar als Bookmark hinterlegt. Es ist sehr ausführlich mit vielen Beispielen.
Die Frage ist nicht wie kann man das Buch verbessern sondern die Qualität der Leser. Leute wie ich sind Spezialisten auf einem anderen Fachgebiet. Ich verstehe einfach manche Fachbegriffe oder Zusammenhänge nicht, SQL ist jedenfalls auch nicht meine Stärke.
Genau genommen bräuchte ich ein Bilderbuch auf kindlichem Niveau oder ich müsste das einmal richtig lernen.
Mein Ziel ist es diese Datenbank so weit zu entwickeln dass ein professioneller Programmierer versteht wie wir arbeiten, welche Informationen wir wann benötigen usw. Dann könnte dies in eine echte Software umgesetzt werden, vielleicht ein interessantes Projekt für einen Studenten - wir werden sehen.
Danke für das interessante Handbuch, es ist interessant und gibt mir Stoff zum Grübeln. Bestimmt "das Buch" für Leute mit mehr Erfahrung.

Re: Suche mit Eingabe in einer Textbox?

Verfasst: Sa 1. Feb 2020, 16:47
von RobertG
Hallo Libremiki,

dass Du die ID auf FALSE setzen musst liegt daran, dass Du nicht den Datensatz änderst, bei dem ID=TRUE ist. Bei mir existiert so ein Datensatz mit ID=FALSE nicht, weil ich direkt nach Erstellen den Datensatz mit TRUE eingebe und das Formular (bei Dir Form_Filter) so einstelle, dass bei "Filter" ID=TRUE steht.

Der Button muss natürlich, wie ich es richtig aus dem Screenshot sehen kann, in das Formular gesetzt werden, das aktualisiert werden soll. Bei ihm die Aktion "Formular aktualisieren" eingestellt. Betätige ich den Button nach Verlassen des Eingabefeldes aus "Form_filter", so wird (wegen des Verlassen des Formulars) zuerst der Datensatz aus "Form_filter" gespeichert und dann die Aktion "Formular aktualisieren" ausgeführt.

Gruß

Robert

Re: Suche mit Eingabe in einer Textbox?

Verfasst: So 2. Feb 2020, 09:10
von Libremiki
Danke für die weiteren Erklärungen. In meiner "echten" Datenbank muss ich auch "TRUE" verwenden. Erfolg macht Neugierig und so habe ich es geschafft dass ich in das Textfeld entweder den Artikelnamen oder die Artikelnummer eingeben kann. Gefiltert werden dann in der "Tabelle" die Spalten "Artikelname" und "Artikelnummer". Das ist praktisch weil man im realen Einsatz z.B. die Artikelnummer einscannen kann ohne vorher das entsprechende Eingabefeld auswählen zu müssen.
Mal sehen was ich als nächstes ausprobiere.