Variantypen vergleichen

  • so, Vriant problem


    Dim rkodocid As Variant
    Dim rpodocid As Variant


    wie vergleiche ich die beiden auf Inhalt.


    so kommt "TypeMismatch"


    rkodocid = rpodocid


    help


    Am besten wäre natürlich die beiden in Strings konvertieren.


    ;)

  • Kommt immer drauf an was im Variant drin ist.
    Wenn da ein Array drin ist musst du die Elemente miteinander vergleichen.
    Bei einem String hätte dein Vergleich aber gehen müssen, also wird wohl keiner drin gewesen sein

  • Wie wäre es mit dem Einsatz von Join?


    Auf wenn es hier um eine Anfängerfrage geht: Auf die allgemeinen Schwierigkeiten sei aber hingewiesen, da erstmal logisch festgelegt werden müsste, was "gleich" bei Arrays bedeutet.


    Array1:
    A
    C
    B


    Array2:
    C
    B
    A


    Haben diese Arrays gleiche Inhalte? Eigentlich ja, streng betrachtet aber ... Die Billig-Methode Join schetert da.


    Was ist, wenn man noch gar nicht weiss, ob ein Variant überhaupt initialisiert ist? Da müsste also eine "etwas" umfassendere Routine her. Vielleicht sollte ich Rudi das für das EntwicklerCamp 2009 als Vortrag vorschlagen. Diskutieren kann man das ja schon bei einem Bierchen demnächst in Gelsenkirchen ;)


    Wenn Roman jetzt sagt: Hurra, Join ist das, was ich gesucht habe, hat er einen Spezialfall abgedeckt, und beim nächsten Einsatz im nächsten Szenario fällt er auf die Nase. Was ist mit
    "1"
    "2"
    und
    1
    2
    Gleich oder ungleich? Spielen Datentapen eine Rolle? Und wenn es dann noch Datums-/Zeitwerte sind ...


    "A"
    "B"
    und
    "A"
    ""
    "B
    Gleich oder ungleich? Auch hier bestimmt wieder die Programmlogik,


    "Es ist ein weites Feld, Luise.", schrieb Fontane als letzten Satz in seine "Effi Briest".


    Bernhard

    • Offizieller Beitrag

    verwende wenn möglich kein Variant. Variant ist nebenbei auch noch eine Performance-Bremse!


    Ansonsten kannst Du im Script mit IsNumeric, IsDate, IsEmpty, IsNull, IsScalar, IsArray, IsList und IsObject den Typ überprüfen.


    Und mit Cstr, CBool, CByte, CCur, CDat, CDbl, CInt, CLng, CSng und CVar den Typ umwandeln.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Ne nichts ist klar..


    hier der Code
    Dim rkotemp(2) As Variant
    Dim rkoidString As String


    rkotemp(1) = rkodoc.GetItemValue("rko_document_id")


    rkoidString = Cstr(rkotemp(1))



    Beim Casten in den String kommt TypeMismatch..


    Beim Abfragen des Typs
    Print isArray(rkotemp(1)) kommt "true"
    beim rest kommt false.


    also was mach ich falsch??

    • Offizieller Beitrag

    na ja ...


    rkodoc.GetItemValue("rko_document_id") ... ist ein Array


    also ist in rkotemp(1) ebenfalls ein Array


    Schaus Dir mal im Debugger an, dort siehst Du es.


    Gruß
    Dirk

  • Debugger läuft nicht wieso auch immer.


    Also gibt es einfache möglichkeit aus einem bestimmten Notes Dokument ein Feld auslesen und in String casten????????


    Kann mir da jemand helfen?


    :)

    • Offizieller Beitrag

    handelt es sich um ein Mehrfachwertefeld oder nicht?


    Ist es kein Mehrfachwertefeld, kannst Du es mit rkodoc.rko_document_id(0) auslesen. Ist es schon ein Textfeld, kommt auch Text zurück. Ansonsten muss noch mit Cstr der Typ in String gewandelt werden.


    Ist es ein Mehrfachwertefeld, hängt es davon ab, was Du weiter damit machen willst.


    Gruß
    Dirk

    • Offizieller Beitrag

    Debugger einschalten:
    - im Client Menü Datei - Extras - Debug LotusScript
    - danach as Script im Client starten, der Debugger springt automatisch an


    zum Array:
    Dim rkotemp(2) as Variant ... bedeutet rkotemp ist ein Array, wobei die Einzelwerte vom Typ Variant sind.
    Der Typ Variant kann aber selber ein Array sein, deshalb kommt auch in der Zeile
    rkotemp(1) = rkodoc.GetItemValue("rko_document_id")
    kein Fehler und Du lädst in den Einzelwert rkotemp(1) im Array rkotemp ein neues Array. Das Array sieht dann in etwa so aus:
    rkotemp(1)(0) = "Inhalt 1"
    rkotemp(1)(1) = "Inhalt 2"
    ...
    rkotemp(1)(x) = "Inhalt x + 1"


    Gruß
    Dirk


    %edit
    falls Du am Sonntag Zeit hast: Dominoforums-Treffen im Raum Stuttgart (So. 03.02.08)
    Ich würde dann das Laptop mitbringen (oder Du bringst Deins mit der Anwendung mit) und wir können über das Problem reden

    • Offizieller Beitrag

    Danke für die Blumen.


    Habs mal auf erledigt gesetzt.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein