Seite 1 von 2
Suche mit Formular-Textbox
Verfasst: So 8. Jan 2023, 20:41
von caldir65
Hallo,
ich habe ein Suchformular nach einem
früheren Beitrag hier erstellt.
In der SQL-Abfrage habe ich auch berücksichtigt, daß bei leerem Feld alles angezeigt werden soll.
Leider funktioniert nur die Suche mit leerem Feld, wo folgerichtig alles angezeigt wird. Gebe ich jedoch einen Wert vor, so kommt in meinem Tabellenfeld nur eine leere Anzeige.
Die Tabellen werden auf meinem MariaDB-Server geführt, die Formulare etc. kommen aus LO 7.3. Als Filter kommt die Tabelle "Hausrat_filter" mit nur zwei Feldern zum Einsatz.
Das Unterformular wird per SQL gefüttert:
Code: Alles auswählen
SELECT * FROM "hausrat_melle_bakum" WHERE LOWER("artikel") LIKE COALESCE('%'||(SELECT LOWER("Suchbegriff") FROM "Hausrat_filter" WHERE "ID" = TRUE)||'%',LOWER("artikel"))
Woran kann es jetzt liegen, daß ich zwar alles angezeigt bekomme, wenn der Suchbegriff leer ist, jedoch nichts, wenn ich einen begriff nehme, der definitiv im Feld artikel enthalten ist?
Gruß, Christoph
Re: Suche mit Formular-Textbox
Verfasst: So 8. Jan 2023, 21:06
von RobertG
Der Code ist wegen der Länge und des dann eingeblendeten Scrollbalkens nicht gut erkennbar:
Code: Alles auswählen
SELECT * FROM "hausrat_melle_bakum"
WHERE LOWER("artikel") LIKE
COALESCE('%'||(SELECT LOWER("Suchbegriff") FROM "Hausrat_filter" WHERE "ID" = TRUE)||'%',LOWER("artikel"))
Zeige einmal einen Screenshot Deiner Tabelle "Hausrat_filter". Starte auch einmal die Unterabfrage
Code: Alles auswählen
SELECT LOWER("Suchbegriff") FROM "Hausrat_filter" WHERE "ID" = TRUE
Da kein Datensatz angezeigt wird, wenn wirklich Inhalt in der Tabelle "Hausrat_filter" steht, der Begriff also nicht NULL ist, muss dort der Fehler stecken.
Vermutlich erhältst Du den gleichen leeren Inhalt, wenn Du ein 'n' in das Feld einträgst. Oder Du hast das Feld in der Tabelle "Hausrat_filter" so erstellt, dass es nicht einfach VARCHAR sondern CHAR ist und dann einfach lauter Leerzeichen bis zur Feldlänge anhängt.
Re: Suche mit Formular-Textbox
Verfasst: Mo 9. Jan 2023, 08:13
von caldir65
Moin Robert,
anbei einmal der Tabellenscreenshot

- Auswahl_036 - Tabellenentwurf Hausrat_filter.png (33.73 KiB) 2360 mal betrachtet
und die gewünschte Teilabfrage...

- Auswahl_035 - Teilabfrage.png (60.43 KiB) 2360 mal betrachtet
Ganz nebenbei - mir ist aufgefallen, daß auf meinem Desktop mit LO 7.3 ein Tabellen-Entwurf bzw. ein Tabellenfeld nicht mehr zu bearbeiten ist, wenn es erstmal gepeichert ist - bei LO 7.4fresh (Arch) auf meinem Notebook könnte ich jedoch etwas ändern - ist das gewollt, oder Einstellungssache für den SQL-Treiber?
Gruß, Christoph
Re: Suche mit Formular-Textbox
Verfasst: Mo 9. Jan 2023, 10:45
von RobertG
Hallo Christoph,
Schreibschutz bei erstellten Feldern:
Das ist abhängig von der verwendeten Datenbank und dem Treiber. Du scheinst nicht mit der internen Version zu arbeiten. Womit verbindest Du zu welcher Datenbank?
Tabelle "Hausrat_filter":
Du hast ein Feld ID als TINYINTEGER erstellt. Das bedeutet, dass das Feld unterschiedliche Zahlen (von -128 bis + 127) abspeichern kann. So ein Feld wird nicht mit "ID" = TRUE abgefragt. Bei '1' wird das funktionieren, weil TRUE und '1' gleich behandelt werden. Entweder also "ID" = 1 oder das Feld zu einem Ja/Nein-Feld machen (BOOLEAN).
Bevor wir weiter nach der Ursache suchen, die ja anscheinend nicht in der Unterabfrage liegt, poste einmal die Art der Datenbank und die Verbindung dazu. Kann ja sein, dass das an den || liegt.
Re: Suche mit Formular-Textbox
Verfasst: Mo 9. Jan 2023, 20:54
von caldir65
RobertG hat geschrieben: ↑Mo 9. Jan 2023, 10:45
Schreibschutz bei erstellten Feldern:
Das ist abhängig von der verwendeten Datenbank und dem Treiber. Du scheinst nicht mit der internen Version zu arbeiten. Womit verbindest Du zu welcher Datenbank?
Ich habe einen MariaDB-Server, auf dem die Tabellen liegen. Verbunden ist Base über den internen Treiber von LO mit dem Server.
Tabelle "Hausrat_filter":
Du hast ein Feld ID als TINYINTEGER erstellt. Das bedeutet, dass das Feld unterschiedliche Zahlen (von -128 bis + 127) abspeichern kann. So ein Feld wird nicht mit "ID" = TRUE abgefragt. Bei '1' wird das funktionieren, weil TRUE und '1' gleich behandelt werden. Entweder also "ID" = 1 oder das Feld zu einem Ja/Nein-Feld machen (BOOLEAN).
Ein Boolean dürfte SQL scheint schwierig sein, da es offensichtlich als untermenge von Int/Tinyint ... betrachtet wird. Demnach müsste ein Boolean quasi simuliert werden...
Bevor wir weiter nach der Ursache suchen, die ja anscheinend nicht in der Unterabfrage liegt, poste einmal die Art der Datenbank und die Verbindung dazu. Kann ja sein, dass das an den || liegt.
Gruß, Christoph
Re: Suche mit Formular-Textbox
Verfasst: Mo 9. Jan 2023, 21:04
von RobertG
Hallo Christoph,
MySQL gibt bei der Verwendung von || keine Verknüpfung raus. Das ist nämlich für MariaDB standardmäßig der Operator OR. Kann allerdings irgendwo in den Einstellungen der Datenbank geändert werden. Verwende stattdessen CONCAT. Also:
Code: Alles auswählen
SELECT * FROM "hausrat_melle_bakum"
WHERE LOWER("artikel") LIKE
COALESCE(CONCAT('%',(SELECT LOWER("Suchbegriff") FROM "Hausrat_filter" WHERE "ID" = TRUE),'%'),LOWER("artikel"))
Wenn Du beim direkten Treiber die Tabellenstruktur nicht ändern kannst, dann bist Du vermutlich als anderer Benutzer mit der Tabelle verbunden als der Benutzer, der die Tabelle erstellt hat. Oder Du hast als der aktuelle Benutzer keine Berechtigung zur Änderung. Ich kann hier mit dem direkten Treiber alle Felder bearbeiten und ändern.
Re: Suche mit Formular-Textbox
Verfasst: Mo 9. Jan 2023, 21:21
von caldir65
Hallo Robert,
danke, das funktioniert offensichtlich.
Gruß, Christoph
Re: Suche mit Formular-Textbox
Verfasst: Di 10. Jan 2023, 20:04
von caldir65
Hallo,
kann ich die resultierende Anzeige in dem Tabellen-Steuerelement jetzt auch noch sortieren lassen - vorzugsweise nach dem Feld "artikel"
Re: Suche mit Formular-Textbox
Verfasst: Di 10. Jan 2023, 21:32
von RobertG
Zum Sortieren musst Du doch nur auf den entsprechenden Tabellenkopf gehen und dann in der Navigationsleiste das entsprechende Symbol wählen (aufwärts, abwärts oder mit Dialog für mehrere Felder).
Ansonsten:
Code: Alles auswählen
SELECT * FROM "hausrat_melle_bakum"
WHERE LOWER("artikel") LIKE
COALESCE(CONCAT('%',(SELECT LOWER("Suchbegriff") FROM "Hausrat_filter" WHERE "ID" = TRUE),'%'),LOWER("artikel"))
ORDER BY "artikel" ASC
Re: Suche mit Formular-Textbox
Verfasst: Mi 11. Jan 2023, 08:13
von caldir65
Moin Robert,
Vielen Dank, hat geklappt.
Da ist die erste Variante über die Tabellenspalte in diesem Fall die flexiblere...
Kann ich eigentlich die Suche so gestalten, daß ich im Suchfeld jetzt den Begriff eingebe, und dann die Suche (den Button) direkt aus dem Suchfeld mit der "Enter"-Taste auslöse? Das wäre noch intuitiver ...
Gruß, Christoph