Das Notes Forum

Best Practices => Diskussionen zu Best Practices => Thema gestartet von: Klafu am 03.08.11 - 14:28:44



Titel: Type Mismatch
Beitrag von: Klafu am 03.08.11 - 14:28:44
Hallo zusammen,

es ist glaub echt nicht meine Woche. Ich brauch mal eine kleine Hilfe zur Fehlermeldung "Type mismatch".

Folgender Fall:
Ich möchte via If Abfrage prüfen ob eine Feld In einem Dokument leer ist, oder nicht. Besonderheit: Das Feld ist eine Checkbox. Das Feld ist laut debugger, wenn es nicht angehakt ist, "".

Wie muss meine If Abfrage nun aussehen, damit ich das prüfen kann?
If Not doc.Getitemvalue("CollectionNotes") = "" Then  und andere bringen mir den Typ mismatch.
Gibt es eine Übersicht, wann ich bei solchen Abfragen welche Operaoren nehmen muss ? Also wann ich jetzt = "" oder != "" oder <> "" oder IS NOTHING oder IsEmpty oder oder oder nehme?
Ich stolpere(scheitere) nämlich häufiger auf(an) das(dem) Problem.

Danke für Tips

Gruß
Chris


Titel: Re: Type Mismatch
Beitrag von: DAU-in am 03.08.11 - 14:34:01
du vergleichst Array mit String.


richtig ist: Inhalt erstes Array-Element mit String:
doc.Getitemvalue("CollectionNotes")(0) = ""


Titel: Re: Type Mismatch
Beitrag von: koehlerbv am 03.08.11 - 14:34:11
NotesDocument.GetItemValue gibt Dir den Inhalt des kompletten Items zurück - und das sind immer Arrays. Du erwartest in Deinem Code aber einen skalaren Wert. Das kann nicht gut gehen  ;)

Und lesbarer wäre beispielsweise
If doc.CollectionNotes (0) <> "" Then

Bernhard


Titel: Re: Type Mismatch
Beitrag von: klaussal am 03.08.11 - 14:52:45
Ich lege immer noch ein Trim um die ganze Sache, falls mal ein User die Leertaste betätigt habe sollte.


Titel: Re: Type Mismatch
Beitrag von: koehlerbv am 03.08.11 - 14:57:16
In einer Checkbox, Klaus?

Bernhard


Titel: Re: Type Mismatch
Beitrag von: klaussal am 03.08.11 - 15:01:17
Zitat
Ich möchte via If Abfrage prüfen ob eine Feld In einem Dokument leer ist, oder nicht.

Mehr darauf bezogen.


Titel: Re: Type Mismatch
Beitrag von: Klafu am 03.08.11 - 15:02:25
Oh man. Super, vielen Dank euch!! :D
Gibts denn da dann vielleicht eine kleine Übersicht, wann ich  = "" oder is Nothing oder sonst was nehmen kann?
Oder hilft da nur es immer wieder falsch zu machen, bis man es richtig macht? ::)

Chris


Titel: Re: Type Mismatch
Beitrag von: koehlerbv am 03.08.11 - 15:04:51
Nothing in Bezug auf Objekte.
Operatoren wie = etc. in Bezug auf skalare Werte.

HTH,
Bernhard


Titel: Re: Type Mismatch
Beitrag von: Klafu am 03.08.11 - 15:10:08
Okay. Und isEmpty oder IsNull sind nur bei Varianten möglich, oder ?
Und wie kann ich prüfen ob ein ganzes Array leer ist ? :)


Titel: Re: Type Mismatch
Beitrag von: koehlerbv am 03.08.11 - 15:12:22
Was verstehst Du unter "leer"?

Bernhard


Titel: Re: Type Mismatch
Beitrag von: Klafu am 03.08.11 - 15:22:36
Leer... eben nicht gefüllt  ;D
Also = "".
Es kann ja vor kommen, dass beim Array(0 to X) Array(0) = "" ist, aber Array(2) = "Irgendwas" ist.
Wie prüf ich, ob das komplette Array(0 to X) = "" ist ?

Ich hoffe, das versteht man jetzt  :)


Titel: Re: Type Mismatch
Beitrag von: koehlerbv am 03.08.11 - 15:28:08
Fulltrim


Titel: Re: Type Mismatch
Beitrag von: Klafu am 03.08.11 - 15:35:21
Klasse! Vielen Dank  :D
Jetzt hab ich ja mein Nachschlagewerk  :)

Beste Grüße
Chris


Titel: Re: Type Mismatch
Beitrag von: Klafu am 04.08.11 - 11:38:05
So, ich wollte jetzt mal das Nachschlagewerk erweitern :)

Variant oder Array in einen einzelnen String umwandeln
Zitat
Implode function 
Concatenates all members of an Array of Strings and returns a string. Elements of the Array are separated by a delimiter, if provided, or the space character (" ").
Note  This function is new with Domino Release 6.
Syntax
Implode(sourceArray, [delimiter])

Chris


Titel: Re: Type Mismatch
Beitrag von: ata am 04.08.11 - 13:58:40
... Implode() oder Join() funktioniert nur auf Textarrays - daher Vorsichtig sein mit den Datentypen

Ich nehme IsArray(  ) um auf Array zu prüfen.

Leerfelder überprüfe ich
wie Bernhard mit => Cstr( doc.FELDNAME(0) )
oder => Cstr( doc.GetItemValue("FELDNAME")(0) )
oder über Evaluate für komplexere Prüfungen mit dem doc als Parameter

... und ggf. mit Trim um Space abzufangen.

Toni