Erweiterte Suche abhängig von aktuellem Datum

Dieses Thema im Forum "Hilfe und Support" wurde erstellt von os2user, 1. April 2008.

  1. os2user

    os2user New Member

    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?
     

    Anhänge:

  2. glucose

    glucose Well-Known Member


    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.
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  3. os2user

    os2user New Member

    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.
     
  4. dotpap

    dotpap Active Member

    Hallo o2user.

    Was ist, wenn Du mit SYSDATE arbeitest?
    in etwa so: event_datum > sysdate
     
  5. glucose

    glucose Well-Known Member


    Doch, das geht. Im Suchfenster auf die Karteikarte "Formel-Abfrage" umschalten und dann die Abfrage eintippen:
    ctod(dtoc(event_datum)) > (curdate()-366)

    Klappt das?
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  6. os2user

    os2user New Member


    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 ;)
     

    Anhänge:

    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  7. glucose

    glucose Well-Known Member

    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
     
  8. Andreas J.

    Andreas J. New Member

    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
     
  9. os2user

    os2user New Member


    Vielen Dank,

    ein "schöner Workarround" ;) - 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.
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  10. Ulli

    Ulli Administrator Mitarbeiter


    Tüte mir doch bitte das Problem mal in eine einzelne E-Mail, mach' ein Schleifchen herum :) 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.
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017