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
Query verbessern
Moderator: Moderatoren
Re: Query verbessern
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.
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:
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:
Gruß
Robert
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||'%'
In der grafischen Benutzeroberfläche schreibst Du stattdessen als Kriterium
Code: Alles auswählen
WIE :Autor || '%'
Möchtest Du das unabhängig von Groß- und Kleinschreibung haben:
Code: Alles auswählen
SELECT * FROM "Tabelle" WHERE LOWER("Autor") LIKE LOWER(:Autor)||'%'
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)||'%'
Robert
Re: Query verbessern
Vielen Dank fuer die Loesungen.
Antonio
Antonio
Re: Query verbessern
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
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
Hallo Antonio,
wenn Du bei
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
wenn Du bei
Code: Alles auswählen
SELECT * FROM "Tabelle" WHERE LOWER("Autor") LIKE '%'||LOWER(:Autor)||'%'
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