Query verbessern

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Antonio
*
Beiträge: 15
Registriert: Sa, 30.09.2006 13:45

Query verbessern

Beitrag 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
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Query verbessern

Beitrag 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

Code: Alles auswählen

WIE :Autor || '%'
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
Antonio
*
Beiträge: 15
Registriert: Sa, 30.09.2006 13:45

Re: Query verbessern

Beitrag von Antonio »

Vielen Dank fuer die Loesungen.
Antonio
Antonio
*
Beiträge: 15
Registriert: Sa, 30.09.2006 13:45

Re: Query verbessern

Beitrag 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
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Query verbessern

Beitrag 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
Antworten