Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: wittmann_franz am 24.02.12 - 10:32:00

Titel: If Abfrage falsch
Beitrag von: wittmann_franz am 24.02.12 - 10:32:00
Guten Tag,

folgendes Script liefert nicht das zurück was ich mir wünsche:

                Dim tdate As New NotesDateTime("Today")
   Dim vaktdat As Variant
   Dim serinJa As String
                  
   Set db = session.Currentdatabase
   Set view = db.GetView ("AnwendungenKopf")
   vaktdat = tdate.DateOnly
         
   Set doc = view.Getfirstdocument()
   While Not doc Is Nothing
      serinJa = doc.App_LIC_Erinnerung_JaNein(0)
      If serinJa <> "Ja" & doc.App_Lic_Erinnerung_Dat(0)<> vaktdat Then
         dNum = dNum +1
         Print "Hallo"            
      End If   
      Set doc = view.Getnextdocument(doc)   
   Wend
   Print "Es ist / sind " & dNum & " Dokumente verarbeitet worden."

Es ist derzeit nur ein Dokument in der Ansicht, welches auf die beiden Bedingungen zutrifft.
Habe die Werte bereits im Debugger überpürft. Das Script sagt immer das es alle Dokumente in der Ansicht verarbeitet hat.
Wenn ich die <> mit = ersetzte wird überhaut kein Dokument bearbeitet. Wenn ich nur 1 der beiden Bedingung angebe,
funktioniert es tadellos.

Was also mache ich verkehrt in der if Abfrage.

Vielen Dank für Eure Hilfe.
Titel: Re: If Abfrage falsch
Beitrag von: ascabg am 24.02.12 - 10:38:35
Hallo,

Was sagt der Debugger denn zu den einzelnen Werten?
Vor allem, was liefert Dir denn doc.App_Lic_Erinnerung_Dat(0) und was steht in vakdat zum Zeitpunkt des Vergleiches?


Andreas
Titel: Re: If Abfrage falsch
Beitrag von: UMPirx am 24.02.12 - 10:40:42
Hallo,

ich denke das die Zeile

While Not doc Is Nothing

in

While Not (doc Is Nothing)

geändert werden muss.

Gruß

Wwe
Titel: Re: If Abfrage falsch
Beitrag von: ascabg am 24.02.12 - 10:42:25
@UMPirx

Warum?  ???


Andreas
Titel: Re: If Abfrage falsch
Beitrag von: UMPirx am 24.02.12 - 10:44:20
Hallo Andreas,

vergiss meine Antwort, wer lesen kann ist klar im Vorteil!!


Gruß und schönes WE!

Uwe
Titel: Re: If Abfrage falsch
Beitrag von: Tode am 24.02.12 - 10:47:18
Datumswerte zu vergleichen ist immer Tricky... vaktdat ist ein String mit dem aktuellen Datum. In App_Lic_Erinnerung_Dat steht warhscheinlich ein Variant vom Typ DateTime. Die sind IMMER ungleich. Du musst beide ins gleiche Format bringen, um die vergleichen zu können... Entweder, indem Du aus doc.App_Lic_Erinnerung_Dat(0) per New auch ein NotesDateTime machst, oder indem Du beide Variablen zu "Variants of Type DateTime" machst (ich meine Today ist schon sowas, und doc.App_Lic_Erinnerung_Dat(0) müsste auch sowas sein, die solltest Du vergleichen können..

Code
Dim dat1 as Variant
Dim dat2 as Variant

dat1 = Today
dat2 = doc.App_Lic_Erinnerung_Dat(0)
if dat1 <> dat2 then

könnte funktionieren (ohne Gewähr)
Titel: Re: If Abfrage falsch
Beitrag von: koehlerbv am 24.02.12 - 11:05:58
Was hat denn der String-Konkatenator hier zu suchen?

If serinJa <> "Ja" & doc.App_Lic_Erinnerung_Dat(0)<> vaktdat Then

Weiters:
Auch, wenn App_Lic_Erinnerung_Dat vom Typ Date/Time ist: Bist Du sicher, dass dort ein Mitternachtswert steht wie in Today?

Bernhard
Titel: Re: If Abfrage falsch
Beitrag von: wittmann_franz am 24.02.12 - 11:08:10
also, habe nun beide Werte in Variant umgewandelt:
klappt aber leider immer noch nicht. dNum wird hochgezählt, obwohl es nur einmal kommen sollte.
Werte im Debugger beim Dokument welches greifen sollte:
Vaktdat   "24.02.2012"    Variant
VErindat   24.02.2012      Variant
sErinJa     "Ja"                  String
Werte bei Dokumenten wo es nicht greifen soll:
Vaktdat    "24.02.2012"   Variant
VErinDat   ""                     Variant
sErinJa      ""

Mein Script sieht jetzt so aus:

   Dim tdate As New NotesDateTime("Today")
   Dim vaktdat As Variant
   Dim vErinDat As Variant
   Dim sErinJa As String
                  
   Set db = session.Currentdatabase
   Set view = db.GetView ("AnwendungenKopf")
   vaktdat = tdate.DateOnly
         
   Set doc = view.Getfirstdocument()
   While Not (doc Is Nothing)
      sErinJa = doc.App_LIC_Erinnerung_JaNein(0)
      vErinDat =  doc.App_Lic_Erinnerung_Dat(0)
      If serinJa <> "Ja" & vErinDat <> vaktdat Then
         dNum = dNum +1
         Print "Hallo"            
      End If   
      Set doc = view.Getnextdocument(doc)   
   Wend
   Print "Es ist / sind " & dNum & " Dokumente verarbeitet worden."


Wie gesagt, wenn nur ein Wert berechnet wird (egal welcher) dann funktioniert es. Nur in Kombination halt nicht
Titel: Re: If Abfrage falsch
Beitrag von: koehlerbv am 24.02.12 - 11:13:12
Nochmal: Was willst Du mit dem "&"??

Bernhard
Titel: Re: If Abfrage falsch
Beitrag von: wittmann_franz am 24.02.12 - 11:26:12
tut mir leid ich steh auf´m Schlauch

If serinJa <> "Ja" and vErinDat <> vaktdat Then

sollte doch dann richtig sein, oder?

Das tuts aber auch nicht

Nochmal zu den Werten, Vaktdat steht der Wert in Anführungszeichen bei VErindat nicht.
Wirkt sich das evt. auch noch aus?
Titel: Re: If Abfrage falsch
Beitrag von: Tode am 24.02.12 - 11:44:33
Tippfehler ? Oder steht das wirklich so da:

Vaktdat   "24.02.2012"    Variant
VErindat   24.02.2012      Variant

Die beiden Werte sind also NICHT gleich...
Titel: Re: If Abfrage falsch
Beitrag von: koehlerbv am 24.02.12 - 11:47:13
DateOnly gibt ja auch einen String zurück!

vaktdat = Today ist kürzer - und korrekt!

Bernhard

PS: Und richtig - And ist LS,  das Pendant in Formelsprache.
Titel: Re: If Abfrage falsch
Beitrag von: wittmann_franz am 24.02.12 - 12:52:43
Es bleibt spannend.... >:(

Jetzt wird der code in der If Abfrage gar nicht mehr gezogen. Bekomme also auf dnum den Wert 0. Kann im Debuger auch nachvollzogen werden. Er springt immer gleich auf EndIf.

Screenshots vom Debugger, siehe Anhänge.
Titel: Re: If Abfrage falsch
Beitrag von: wittmann_franz am 24.02.12 - 12:57:02
ach so ja, und so sieht das Script jetzt aus:

   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim doc As NotesDocument
   Dim dNum As Double
   Dim vaktdat As Variant
   Dim vErinDat As Variant
   Dim sErinJa As String
                  
   Set db = session.Currentdatabase
   Set view = db.GetView ("AnwendungenKopf")
   vaktdat = Today
         
   Set doc = view.Getfirstdocument()
   While Not (doc Is Nothing)
      sErinJa = doc.App_LIC_Erinnerung_JaNein(0)
      vErinDat =  doc.App_Lic_Erinnerung_Dat(0)
      If serinJa <> "Ja" and vErinDat <> vaktdat Then
         dNum = dNum +1
         Print "Hallo"            
      End If   
      Set doc = view.Getnextdocument(doc)   
   Wend
   Print "Es ist / sind " & dNum & " Dokumente verarbeitet worden."
Titel: Re: If Abfrage falsch
Beitrag von: koehlerbv am 24.02.12 - 12:59:00
serinJa ist lt. Debugger "Ja", wie soll er da in die Schleife gelangen?

Bernhard
Titel: Re: If Abfrage falsch
Beitrag von: wittmann_franz am 24.02.12 - 13:08:08
oh jeh,
da Stand ich ja wohl mächtig auf der Leitung

mit
If serinJa = "Ja" and vErinDat = vaktdat Then
klappts dann auch so wie es sein soll.

Danke noch mal an alle für die Hilfe und ein schönes Wochenende