Seite 1 von 1
Query verbessern
Verfasst: Fr, 12.02.2016 12:08
von Antonio
Guten Tag.
Ich habe alle meine Bücher in einer Databank gespeichert.
Die Datenbank besteht aus folgende Felder :
Titel, Untertitel, Autor, Verlag, Jahr, ISBN, Sprache
Jetzt kann ich in der Query "suche Autor" alle Bücher des Autors anzeigen lassen.
Leider hat die Query Schönheitsfehler:
Man muss den ganzen Namen und Vornamen des Autors in der Suche schreiben mit Gross- und Kleinbuchstaben.
Gibt es einen Lösung, um die Query flexibler zu schreiben?
Im Abfrageentwruf habe ich unter Kriterium " :Autor "geschrieben.
Danke für die Hilfe.
Antonio
Re: Query verbessern
Verfasst: Fr, 12.02.2016 16:08
von RobertG
Hallo Antonio,
folgende Schritte führen nach und nach zu einer Verbesserung. Ich schreibe hier zuerst einmal die Fassung, die sich zeigt, wenn Du auf den SQL-Code umschaltest.
Code: Alles auswählen
SELECT * FROM "Tabelle" WHERE "Autor" LIKE :Autor||'%'
Jetzt brauchst Du nur die korrekten Anfangsbuchstaben.
In der grafischen Benutzeroberfläche schreibst Du stattdessen als Kriterium
Bitte auf die Leerzeichen achten.
Möchtest Du das unabhängig von Groß- und Kleinschreibung haben:
Code: Alles auswählen
SELECT * FROM "Tabelle" WHERE LOWER("Autor") LIKE LOWER(:Autor)||'%'
Sowohl der Inhalt der Spalte "Autor" als auch Deine Eingabe werden in Kleinschreibung verglichen. Mit UPPER würdest Du die Großschreibung vergleichen.
In der grafischen Benutzeroberfläche musst Du jetzt den Eintrag für das Feld ändern. Statt "Autor" steht dort dann LOWER ( "Autor" ). Hier auch auf die Leerzeichen achten. In den Kriterien dann ebenfalls das LOWER() mit entsprechenden Leerzeichen einfügen. Das Ganze geht erheblich einfacher ohne Beachtung der Leerzeichen, wenn Du die Design-Ansicht ausschaltest.
Möchtest Du einen Eintrag machen, der an beliebiger Stelle im Autorennamen vorkommt, dann geht das so:
Code: Alles auswählen
SELECT * FROM "Tabelle" WHERE LOWER("Autor") LIKE '%'||LOWER(:Autor)||'%'
Gruß
Robert
Re: Query verbessern
Verfasst: Mo, 15.02.2016 18:40
von Antonio
Vielen Dank fuer die Loesungen.
Antonio
Re: Query verbessern
Verfasst: Fr, 19.02.2016 16:54
von Antonio
Hallo,
cih habe die Aenderungen angebracht und es hat geklappt.
Die letzte Lösung ist :
"Möchtest Du einen Eintrag machen, der an beliebiger Stelle im Autorennamen vorkommt, dann geht das so:"
SELECT * FROM "Tabelle" WHERE LOWER("Autor") LIKE '%'||LOWER(:Autor)||'%'
Liegt da nicht einen Fehler inder Query?
Wenn cih eine beliebige Suche eingebe, werden alle Daten angezeigt.
Danke für die Infos.
Antonio
Re: Query verbessern
Verfasst: Fr, 19.02.2016 18:55
von RobertG
Hallo Antonio,
wenn Du bei
Code: Alles auswählen
SELECT * FROM "Tabelle" WHERE LOWER("Autor") LIKE '%'||LOWER(:Autor)||'%'
ohne Angabe eines Inhaltes für :Autor alle Datensätze aus "Tabelle" erhältst, dann liegt das daran, dass Deine Base-Version bei den Parameterabfragen statt NULL einen leeren Text an die Abfrage weiter gibt. Das ist in allen LO-Versionen vor LO 4.4 und vermutlich auch bei AOO der Fall. Es war bisher wohl niemandem aufgefallen, dass Parameterabfragen, in Formularen als Unterformular genutzt, bei leeren Feldern NULL auslesen, bei der direkten Abfrage dann aber einen leeren Text weitergaben.
Wenn Du die Parameterabfrage jetzt z.B. in ein Unterformular einbauen würdest und den Parameter aus dem Hauptformular ausliest, dann wird auch Deine Base-Version ohne eine Angabe von Inhalt für den Parameter keinen Datensatz angeben.
Gruß
Robert