Seite 1 von 3

Hilfe zu Parameterabfrage

Verfasst: Sa 15. Nov 2014, 01:16
von Maltan
Ein Anfänger sucht wieder mal Hilfe.

Habe eine Parameterabfrage erstellt:
SELECT "Dienste"."Datum" "Datum", "Personal"."Name" "Name", "Schicht"."Bezeichnung" "Bezeichnung", "Schicht"."Reih_id" FROM "Dienste", "Personal", "Schicht" WHERE "Dienste"."Pers_id" = "Personal"."ID" AND "Schicht"."ID" = "Dienste"."Schicht_id" AND ( LOWER ( "Dienste"."Datum" ) LIKE LOWER ( :qDatum || '%' ) OR :qDatum IS NULL ) AND ( LOWER ( "Personal"."Name" ) LIKE LOWER ( :qName || '%' ) OR :qName IS NULL ) AND ( LOWER ( "Schicht"."Bezeichnung" ) LIKE LOWER ( :qBezeichnung || '%' ) OR :qBezeichnung IS NULL ) ORDER BY "Schicht"."Reih_id" ASC

Die klappt für "Bezeichnung" und den "Namen". Das Datum lässt sich nicht abfragen. Liegt das vielleicht am Feldtypen der Tabelle (Date)?

Vielen Dank für Euere Hilfe

Re: Hilfe zu Parameterabfrage

Verfasst: Sa 15. Nov 2014, 09:51
von RobertG
Hallo Maltan,

mit LIKE ... werden Zeichenketten verglichen. Mit LOWER() werden Zeichenketten in Kleinbuchstaben umgewandelt. Beides passt überhaupt nich zu einem Datumsfeld. Mittels LOWER() wandelst Du ein Datum in einen Text um. Damit wird aber das Datum umgewandelt, was in der entsprechenden Formatierung aus der Datenbank kommt. Nicht die Datumsschreibweise, wie sie mit der Formatierung in LO für Dich sichtbar ist. Aus dem 15.11.14 wird dann 2014-11-15. Damit fragst Du dann bei LOWER ( :qDatum || '%' ) zuerst die vierstellige Jahreszahl ab. Auf den Tag und den Monat kommst Du so nicht.

Wenn Du unbedingt das Datum mit einer LIKE-Abfrage durchsuchen möchtest, dann musst Du die Datenbankschreibweise umwandeln:

Code: Alles auswählen

RIGHT( '0' || DAY( "Datum" ), 2 ) || '.' || RIGHT( '0' ||MONTH( "Datum" ), 2 ) || '.' || YEAR( "Datum" ) AS "Datum_als_Text" 
Damit hast Du dann die hier übliche Schreibweise. Die Umformulng mit RIGHT('0' ...) ist nur dann notwendig, wenn Du grundsätzlich ein Datum mit zweistelligem Tag und zweistelligem Monat haben möchtest. Sonst geht es auch mit:

Code: Alles auswählen

DAY( "Datum" )|| '.' || MONTH( "Datum" ) || '.' || YEAR( "Datum" ) AS "Datum_als_Text" 
Gruß

Robert

Re: Hilfe zu Parameterabfrage

Verfasst: Di 18. Nov 2014, 13:14
von Maltan
Vielen Dank für die Antwort,
das kommt eben dabei heraus wenn einer der Null Ahnung hat einen Code aus einer Datenbank/abfrage kopiert und ummodelt.
Ich will das Datum nicht in Text umwandeln sondern nur diese drei Parameter (Datum, Bezeichnung, Name) innerhalb ein Abfrage filtern. Die Abfrage soll auch ein Ergebnis bringen wenn zu einem oder mehreren Parameter keine Eingaben gemacht werden.
Dazu bräuchte ich den richtigen Code.
Darf ich auf Hilfe hoffen?
Vielen Dank im Voraus

Re: Hilfe zu Parameterabfrage

Verfasst: Di 18. Nov 2014, 16:00
von RobertG
Hallo Maltan,

was genau sollen denn die Personen, die die Abfrage ausführen, eingeben? Wenn Du in Deiner Abfrage für das Datum z.B. '2014' eingibst, dann werden alle Datensätze aus dem Jahr 2014 angezeigt. Ich nehme an, dass hier lediglich die Eingabe im Moment nicht passend ist. Möchtest Du wirklich ein komplettes Datum? Dann ersetze

Code: Alles auswählen

( LOWER ( "Dienste"."Datum" ) LIKE LOWER ( :qDatum || '%' ) OR :qDatum IS NULL )
durch

Code: Alles auswählen

( "Dienste"."Datum" =:qDatum)
Gruß

Robert

Re: Hilfe zu Parameterabfrage

Verfasst: Mi 19. Nov 2014, 11:23
von Maltan
Hat leider noch nicht geklappt irgeneinen Fehler habe ich nocht gemacht.
Könnten Sie sich bitte den Dateianhang ansehen und den Code der Abfrage_Name_Datum_Bez anpassen.
Es soll möglich sein, dass eine Eingabe auch bezüglich Parameter Datum nicht gemacht werden muss (IS NULL ?)
Vielen Dank für die Bemühungen

Re: Hilfe zu Parameterabfrage

Verfasst: Mi 19. Nov 2014, 18:33
von F3K Total
Klappt nicht,
der Parameterdialog kann das leere Datum nicht interpretieren, anbei eine Lösung mit Formular, da klappt's auch mit leerem Datum.
Gruß R

Re: Hilfe zu Parameterabfrage

Verfasst: Do 20. Nov 2014, 15:53
von Maltan
Vielen Dank sieht gut aus und funktioniert, jetzt muss ich nur noch eine ordentliche Eingabe der Dienste und ansehnliche Berichte mit diversen Ergebnissen hinbekommen.

Re: Hilfe zu Parameterabfrage

Verfasst: Fr 21. Nov 2014, 22:10
von Maltan
Da stellt sich die nächste Frage: Wie bekomme ich das Filterergebnis in einen Bericht?

Re: Hilfe zu Parameterabfrage

Verfasst: Sa 22. Nov 2014, 12:45
von F3K Total
Na,
das geht nun einfach, die Filterkriterien stehen in der Tabelle Filter, erstelle diese Ansicht:

Code: Alles auswählen

SELECT 
"Dienste"."Datum", 
"Personal"."Name", 
"Schicht"."Bezeichnung", 
"Schicht"."Reih_id"
FROM 
"Dienste", 
"Personal", 
"Schicht",
"Filter" 
WHERE 
"Dienste"."Pers_id" = "Personal"."ID" 
AND 
"Schicht"."ID" = "Dienste"."Schicht_id" 
AND 
( LOWER ( "Personal"."Name" ) LIKE LOWER ( "F_NAME"|| '%' ) OR "F_NAME" IS NULL ) 
AND 
( LOWER ( "Schicht"."Bezeichnung" ) LIKE LOWER ( "F_BEZEICHNUNG"|| '%' ) OR "F_BEZEICHNUNG" IS NULL ) 
AND 
( "Dienste"."Datum" >= "F_DATUM_VON" OR "F_DATUM_VON" IS NULL ) 
AND 
( "Dienste"."Datum" <= "F_DATUM_BIS" OR "F_DATUM_BIS" IS NULL ) 
ORDER BY 
"Schicht"."Reih_id" ASC
und baue den Bericht darauf auf.
Gruß R

Re: Hilfe zu Parameterabfrage

Verfasst: Do 4. Dez 2014, 22:44
von Maltan
Vielen Dank