Bezüglich der besseren Speicherung von numerischen Werten anstelle von Texten möge man mir nachsehen, dass ich in diesem ersten Datenbankversuch noch nicht die Kenntnis habe, im Bericht die numerischen Werte wieder in Texte umzuformen (also aus 3 mach '+++') und deshalb erstmal bei der Speicherung der Bewertungen in Textform verbleibe. Wird ja auch nur eine kleine Datenbank mit ca. 150 Datensätzen. Über eine Info hierzu würde ich mich dennoch freuen.
Da meine
Berichte nur sortierte formularähnliche Auflistungen sind, sah ich keine Notwendigkeit, dafür eine Abfrage zu erstellen, weil Base bei den Berichten in der Entwurfsansicht bei der
Sortierung die Eingabe von Ausdrücken zulässt. Allerdings scheint dies generell nicht zu funktionieren.
Ich probierte Ausdrücke mit und ohne '=' am Anfang, mit den Funktionen LENGTH() oder LEN(), Feldnamen in "" oder in [] oder ohne Begrenzer, egal wie, es gab stets Fehlermeldungen ("Column not found" oder "Syntax-Fehler"). Nicht einmal bedeutungslose numerische Ausdrücke wie =5 oder =(5) oder nur 5 werden akzeptiert. Ich denke mal, da ist Base verbuggt.
Also versuchte ich die Sortierung in einer
Abfrage in der SQL-Ansicht. Auch hier waren die Token LENGTH( und LEN( nicht bekannt. Da die Bewertungen nur "+"-Zeichen enthalten, reicht eine Verbindung der Texte aus und danach dann die Sortierung.
Allerdings funktioniert diese SQL-Anweisung nicht einwandfrei:
Code: Alles auswählen
Select *, "Anspruch" || "Spannung" || "Action" || "Humor" || "Erotik" AS Wertung From "Filme" Order By "Gesamt" DESC, Wertung DESC, "Titel" ASC;
Ist nämlich auch nur ein Feld leer, hat dies den Wert NULL und unterdrückt in Wertung alle anderen "+"-Zeichen, Wertung wird NULL und die Sortierung falsch.
Danke an RobertG für den Link zum Handbuch. Dort konnte ich die passende Funktion finden. Und so funktioniert die Abfrage perfekt:
Code: Alles auswählen
Select *, IFNULL("Anspruch",'') || IFNULL("Spannung",'') || IFNULL("Action",'') || IFNULL("Humor",'') || IFNULL("Erotik",'') AS Wertung From "Filme" Order By "Gesamt" DESC, Wertung DESC, "Titel" ASC;
Hier werden mit der Funktion IFNULL() leere Felder (die haben den Wert NULL) durch leere Zeichenketten (sind nicht NULL) ersetzt, dann funktioniert auch die Verkettung mit "||" zu Wertung und die Sortierung wird korrekt.
Aber wie bekomme ich jetzt in meinen fertig definierten Bericht diese neue Abfrage hinein? Und wenn Datensätze erfasst wurden und der Bericht wird ausgeführt, wird doch hoffentlich auch die Abfrage neu ausgeführt, oder? Über Hinweise wäre ich sehr dankbar.