Erweiterte Suche abhängig von aktuellem Datum

Ich weiß mir keinen Rat mehr:

Es soll in einer Tabelle ein Suchkriterium festgelegt und gespeichert werden, so das diese Suche oben in der Suchen-Dropdownliste der Tabelle jederzeit auswählbar ist. Das Ergebnis soll abhängig vom aktuellen Datum sein.

Gegeben ist eine Spalte „Ereigniszeitpunkt“. Die Felddefinition ist „Zeitpunkt“ (!). Hier scheint mir das Problem zu sein.

Die Abfrage soll wie folgt lauten:

Zeige alle Datensätze, bei denen das Datum in „Ereigniszeitpunkt“ größer curdate()-366 ist. Bei reinen Datumsfeldern funktioniert das, es funktioniert auch, wenn das Datum von Hand fest, also z. B. 1.4.2007 eingegeben wird. Es funktioniert nur nicht, wenn es so wie in anhängendem screenshot gemacht wird und die Funktion curdate() benutzt wird.

Hat jemand noch einen Trick auf Lager?

Ich vermute, dass der Datentyp “Zeitpunkt” etwas anderes ist als “Datum”, so dass beide nicht miteinander vergleichbar sind.

In der Hilfe steht bei der Übersicht der Rechenfunktionen, dass curdate() einen Datums-Typ liefert. Dieser muss für den Vegleich zuerst in einen Zeitpunktstyp gewandelt werden. Auf Anhieb kann ich aber nicht sagen, welche Funktion dafür zuständig ist.

Das ist klar, ich habe auch schon mit allen möglichen und unmöglichen Umwandlungsfunktionen getestet. Man müsste halt die Feldvariable aus der Datenbank vor dem Vergleich umwandeln können, dann würde es sicher gehen. Da sehe ich aber leider keine Möglichkeit.

Hallo o2user.

Was ist, wenn Du mit SYSDATE arbeitest?

in etwa so: event_datum > sysdate

Doch, das geht. Im Suchfenster auf die Karteikarte “Formel-Abfrage” umschalten und dann die Abfrage eintippen:

ctod(dtoc(event_datum)) > (curdate()-366)

Klappt das?

Danke für alle Hinweise bis jetzt. Ja, das funktioniert, allerdings nur für Daten, die auch direkt in der Tablle drin stehen. Bei Verknüfpungen scheint es nicht zu funktionieren, leider.

Wer möchte, kann es ja mal nachvollziehen, ich habe eine kleine Testdatenbank angehängt. In beiden Tabellen befindet sich bereits eine Suchabfrage. Bei der einen funktioniert es, bei der verknüpften nicht.

Vielleicht gibts doch noch einen Trick :wink:

dat_test.zip (6.75 KB)

Das ganze sieht nach einem schön reproduzierbaren Bug aus. Wenn man z.B. den Vergleich event_datum > curdate()-7 in einen Report ausgibt, dann kommt das erwartete Ergebnis: meistens 0 und bei den Ereignissen der letzten 7 Tage 1. Das Problem scheint auch nicht mit den Datentypen zusammenzuhängen.

Eine Umgehungsmöglichkeit für den Fehler besteht darin, ein zusätzliches Rechenfeld in der Datenbank anzulegen. Dieses Feld berechnet nur die Differenz vom event_datum bis heute (in Tagen) und kann für Suchabfragen verwendet werden. z.B.

Felddefinition: date_diff = curdate() - event_datum

Datentyp: Ganze Zahl

Also …

ich weiß, dass Papyrus zumindest bei dem Aufruf von abgelegten Suchabfragen in bestimmten Fällen Probleme hat. Ulli hat mir das auch als Bug bestätigt und es soll in einem der nächsten Updates behoben werden.

Wenn ich mir in meiner Datenbank die Einträge mit den ‘heutigen’ Geburtstagen ausgeben lassen möchte, dann funktioniert das unter dem Menüpunkt ->erweiterte Suchabfrage ->Formelabfrage: DAYOFMONTH(Geburtsdatum)=DAYOFMONTH(Sysdate) AND MONTH(Geburtsdatum)=MONTH(Sysdate) - Geburtsdatum ist der von mir eingerichtete Feldname - einwandfrei. Lege ich diese Abfrage allerdings im benannten DropdownMenü als Suchabfrage ab und klicke es dann wieder an, sagt mir Papyrus: “nichts gefunden”.

Ich kann das allerdings nicht näher eingrenzen. Eine Abfrage nach einem bestimmen Jahr in einem Datumsfeld Z.b. ‘1967’ findet Papyrus auch als abgelegte Suchabfrage ohne Weiteres.

Andreas

Vielen Dank,

ein “schöner Workarround” :wink: - Darauf muß man erst mal kommen. Nach einer kleinen Anpassung “CURDATE() - CTOD(event_datum)” funktioniert es tatsächlich.

Befriedigend ist die Lösung zwar nicht, aber immerhin, es funktioniert.

Vielleicht bekommt Ulli ja die Problematik mit und es gibt ein Bugfix, falls das Problem seitens ROM als solches anerkannt wird.

Tüte mir doch bitte das Problem mal in eine einzelne E-Mail, mach’ ein Schleifchen herum :slight_smile: und schick’s mir, ich leite das dann weiter.

Bugmeldungen aus dem Forum zusammenzufieseln, fehlt mir im Moment leider die Zeit, ich bitte um Verständnis.