Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: schroederk am 16.02.11 - 08:23:06

Titel: Finde den Fehler (Type mismatch) nicht
Beitrag von: schroederk am 16.02.11 - 08:23:06
Hallo,

auch auf die Gefahr hin, mich endlos zu blamieren...

Testweise möchte ich 4 Variablen anzeigen lassen. Alle sind als String dimensioniert:
Dim argvdat,argbdat,calvdat,calbdat As String

2 werden durch den Query-String übergeben:

Code
arg = s.DocumentContext.Query_String(0)
arg = LCase(Mid$(arg, p1 + 1))
argarray = Evaluate({@Explode("} & arg & {"; "&")})
argvdat = argarray(4)
argbdat = argarray(5)

2 kommen aus einem Kalender-Dokument:

Code
calvdat = doc.GetItemValue("StartDate")(0)
calbdat = doc.GetItemValue("EndDate")(0)


Wenn ich die 4 Variablen in einer Zeile ausgeben möchte:
Code
Print "avon="+argvdat+" abis="+argbdat+"<br/>cvon="+calvdat+" cbis="+calbdat
erhalte ich den Fehler "Type Mismatch..."

Mache ich allerdings 2 Zeilen draus:
Code
Print "avon="+argvdat+" abis="+argbdat+"<br/>"
Print "cvon="+calvdat+" cbis="+calbdat
dann wird kein Fehler erzeugt und die Werte korrekt angezeigt.

Warum ist das so?

Problem ist, dass ich die Variablen vergleichen möchte (If argvdat = calvdat then), erzeugt zwar keinen Fehler, wird aber auch nie Wahr.
Titel: Re: Finde den Fehler (Type mismatch) nicht
Beitrag von: ascabg am 16.02.11 - 08:26:45
Hallo,

Und Du bist Dir sicher, dass alle Deine definierten Variablen vom Typ String sind?


Andreas
Titel: Re: Finde den Fehler (Type mismatch) nicht
Beitrag von: DerAndre am 16.02.11 - 08:27:05
Was passiert denn wenn Du im Print aus dem + ein & machst?

Und das natürlich auch. da ja nur Strings in der Statuszeile ausgegeben werden können.
Titel: Re: Finde den Fehler (Type mismatch) nicht
Beitrag von: Peter Klett am 16.02.11 - 08:33:30
Dim argvdat,argbdat,calvdat,calbdat As String

dimensioniert höchstens calbdat als String, alle anderen sind Variant.

calvdat und calbdat sind mit Sicherheit keine Strings, da StartDate und EndDate im Kalender wohl Datumsfelder sind. Die musst Du wohl erst in String umwandeln (Cstr oder Format sind da hilfreich).

Strings verkettet man besser mit & anstatt mit +, da + eine mathematische Addition werden kann.

Titel: Re: Finde den Fehler (Type mismatch) nicht
Beitrag von: DerAndre am 16.02.11 - 08:34:52
Peter hat es gesehen.
Titel: Re: Finde den Fehler (Type mismatch) nicht
Beitrag von: schroederk am 16.02.11 - 08:49:40
Dim argvdat,argbdat,calvdat,calbdat As String

dimensioniert höchstens calbdat als String, alle anderen sind Variant.

Vielen Dank Peter, das war tatsächlich der Fehler (gibt es sonst eine Möglichkeit viele Variablen gleichen Typs gemeinsam zu dimensionieren?)

calvdat und calbdat sind mit Sicherheit keine Strings, da StartDate und EndDate im Kalender wohl Datumsfelder sind. Die musst Du wohl erst in String umwandeln (Cstr oder Format sind da hilfreich).
Durch den Zugriff doc.GetItemValue("StartDate")(0) hab ich wohl schon String zurückbekommen, jedenfalls funktioniert nun die Ausgabe und auch der Vergleich im If-Statement

Strings verkettet man besser mit & anstatt mit +, da + eine mathematische Addition werden kann.

Ich werde mich bemühen, mich umzustellen (bei der Reihe an Programmiersprachen kommt man aber schonmal durcheinander  ;) )
Titel: Re: Finde den Fehler (Type mismatch) nicht
Beitrag von: ascabg am 16.02.11 - 09:03:58
Zitat
gibt es sonst eine Möglichkeit viele Variablen gleichen Typs gemeinsam zu dimensionieren?
Ja.

Dim Variable1 As String, Variable2 As String, Variable3 As String


Andreas
Titel: Re: Finde den Fehler (Type mismatch) nicht
Beitrag von: schroederk am 16.02.11 - 09:20:56
Wow, da hat sich Lotusscript ja nicht lumpen lassen  ;) ganze 3 Zeichen gespart. (Eigentlich nur 2, denn ich muss das Komma ja wieder abziehen)
Naja, man kann ja nicht alles haben, trotzdem danke Andreas.
Titel: Re: Finde den Fehler (Type mismatch) nicht
Beitrag von: Peter Klett am 16.02.11 - 09:22:18
doc.GetItemValue("StartDate")(0) gibt nicht zwingend einen String zurück, sondern das erste Element des Items in dem Typ des Items (Datum , String, Zahl u.s.w.).

Möglich, dass durch die Zuordnung direkt in einen String eine Umwandlung erfolgt (habe das noch nicht probiert). Für besser halte ich eine saubere Typumwandlung, wie z.B.

calvdat = Cstr (doc.GetItemValue("StartDate")(0))
Titel: Re: Finde den Fehler (Type mismatch) nicht
Beitrag von: Peter Klett am 16.02.11 - 09:32:41
Strings verkettet man besser mit & anstatt mit +, da + eine mathematische Addition werden kann.

Ich werde mich bemühen, mich umzustellen (bei der Reihe an Programmiersprachen kommt man aber schonmal durcheinander  ;) )

Da braucht man garnicht so weit zu gehen, schon in Formelsprache ist es genau entgegengesetzt, da ist & dann die logische Verkettung ...
Titel: Re: Finde den Fehler (Type mismatch) nicht
Beitrag von: marschul am 16.02.11 - 15:53:23
Zitat
Da braucht man garnicht so weit zu gehen, schon in Formelsprache ist es genau entgegengesetzt, da ist & dann die logische Verkettung ...

Genau! Und diese sollte man nicht in LotusScript einsetzen - hatte ich letztens: Ständiger Wechsel zwischen Formelsprache und Script und dann versehentlich ein '&' als logische Verkettung in Script eingesetzt mit dem Ergebnis, dass die Routine vorne und hinten nicht funktionierte und es dummerweise nicht einmal zu einer Fehlermeldung zur Laufzeit kam. Hatte 'ne Weile gedauert, bis es gefunden war ;)

Gruß
Marco