Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: nieke am 05.12.03 - 14:12:08
-
Hallo Ihr!
Ich habe folgendes Problem:
Per Script möchte ich über eine Inputbox ein Datum eingeben lassen.
Jetzt will ich eine Collection bauen, in der alle Dokumente sind, deren Feld DatumErstellung (ein Datum-/Zeitfeld) kleiner oder gleich dem Datum aus der Inputbox sein soll.
Um das machen zu können muß ich wahrscheinlich die Eingabe irgendwie formatieren, oder?
Das Script sieht im Moment ungefähr so aus:
....
ende= Inputbox("Bis zu welchem Datum soll archiviert werden?", "Archivierung")
selection="form=""Maske"" & Feld1=""Wert1"" & DatumErstellung<='"+ende+"' & Feld2='"+wert2+"'"
Set collection=db.search(selection,datetime,0)
....
jedoch bleibt meine collection immer leer, da er das irgendwie nicht vergleichen kann.
Habt Ihr eine Idee, wie ich das machen muß?
Ich stehe da so ein bißchen auf dem Schlauch.
-
Die Inputbox liefert dir Text zurück, den du in einen Datumswert umwandeln mußt oder den Datumswert aus dem Dokument in einen Text-Wert
Dabei ist zu beachten, dass der Anwender nicht immer das Datum in einem sauberen Wert éingibt
-
Und wenn du solche SearchStrings aufbaust dann nimm lieber | anstelle von "" das liest sich einfacher und du kannst Fehler leichter finden.
selection=|form="Maske" & Feld1="Wert1" & DatumErstellung<="| +ende+ |" & Feld2= "|+wert2 +|"|
Thomas
-
Die Inputbox liefert dir Text zurück, den du in einen Datumswert umwandeln mußt oder den Datumswert aus dem Dokument in einen Text-Wert
Es geht nur der erste Weg, den mahonri aufgezeigt hast, ist ein machbarer - der zweite nicht: Wenn beide Werte Textwerte sind, funktioniert kein Datumsvergleich mehr ("15.11.2003" ist grösser als "05.12.2003").
Zu unterstreichen ist der Hinweis, dass der Wert aus der Inputbox immerhin von der fehlerträchtigen OSI-Schicht 8 gegeben wurde - er muss vor Verwendung also unbedingt auf Isdate geprüft werden.
HTH,
Bernhard
-
@koehlerbv:
Du hast natürlich recht mit dem Textvergleich
Habe mich nur meistens dazu durchgerungen mein Datumsformat in Textfelden auf JJJJMMTT festzulegen, was man aber nich voraussetzen sollte
-
.. erstmal vielen Dank für den Tip für die Schreibweise, ohne die ganzen """""
Aber trotzdem geht's nicht so richtig.
Irgendwie versteht die Collection nicht, daß sie die Eingabe mit dem Datumsfeld "DatumErstellung" vergleichen soll. Die Collection bleibt immer leer. Muß ich die beiden Daten irgendwie noch auf das gleiche Format bringen?
Und wenn, wie mache ich das denn?
-
Du soltest zwei Dinge checken
1: Wie ist dein DateTime gesetzt, denn die Collection besteht nur aus Dokumenten, die sein diesem Datum geändert worden sind
2: Wie gibst du das Vergleichsdatum ein.
DatumErstellung<=@TextToTime(ende)
-
Das NotesDateTime habe folgendermaßen gesetzt:
Dim dateTime As New NotesDateTime( "01/01/2000" )
damit sollte alle Dokumente enthalten sein, da es vorher die Datenbank noch nicht gab.
Die Eingabe sieht so aus:
Dim entry As Variant
...
entry= Inputbox("Bis zu welchem Datum soll archiviert werden?" "Archivierung")
Diese Eingabe soll im Suchstring für die Collection mit dem Feld "DatumErstellung" (ist ein Datum/Zeit-Feld in der Maske) verglichen werden:
selection=|form="Maske" & Feld1="Wert1" & Feld2="|+wert2+|" & ((DatumErstellung) < ("|+entry+|"))|
'
Set collection=db.search(selection,datetime,0)
... es geht einfach nicht!
-
... wenn du mit Datumswerten arbeitest, dann schau mal in der Notes-Hilfe, wie du Datumswerte in Formelsprache schreiben musst => sie müssen in eckigen Klammern gerahmt sein - die genauere Syntax findest du in der Hilfe...
ata
-
Hi,
warum setzt du den Feldnamen im Klammern?
Versuch es mal so:
selection=|Form="Maske" & Feld1="Wert1" & Feld2="|+wert2+|" & DatumErstellung < "|+entry+|"|
Axel
-
... die Klammern waren nur ein Zwischenversuch, um sicherzugehen, daß Notes nicht "&" nicht vor "<" geht und andersrum, ohne geht's aber auch nicht.
Hatte keine tiefere Bedeutung.
Bezüglich der eckigen Klammern bei einem Datum muß ich noch mal in der Hilfe gucken...
-
Hi,
noch eine Alternative zum Testen. So was ähnliches hat beei mir funktioniert.
selection=|@Contains(Form;"Maske") & @Contains(Feld1;"Wert1") & @Contains(Feld2;"| & wert2 & |") & @Date(DatumErstellung) < @Date("| & entry & |")|
Axel
-
... das ist es auch nicht.
Leider nicht. Der findet immer noch nix!
Das mit den eckigen Klammern habe ich, glaub' ich noch nicht ganz begriffen.
Könnt Ihr mir das mal kurz zeigen? In der Hilfe habe ich noch nichts dazu gefunden...
-
... was die eckigen Klammern betrifft...
selection=|Form="Maske" & Feld1="Wert1" & Feld2="|+wert2+|" & DatumErstellung < [|+entry+|]|
... sollte eigentlich schon passen...
ata
-
...ja! Das war's! Die Collection findet endlich die Dokumente, die sie finden soll.
DANKE!