Autor Thema: LotusScript-Fehler  (Gelesen 3625 mal)

Jürgen Schomann

  • Gast
LotusScript-Fehler
« am: 12.04.12 - 19:10:44 »
ich habe folgenden LotusScript-Code

Dim FieldLong(1) As Long
Dim FieldVariant(1) As Variant
Dim ScalarVariant As Variant
   
FieldLong(0) = 1
FieldLong(1) = 2

FieldVariant(0) = "a"
FieldVariant(1) = FieldLong      ' OK
   
ScalarVariant = FieldVariant     ' Fehler Type mismatch

Einer Variant-Variablen können ja verschiedene Datentypen zugewiesen werden. Wenn in einem Feld von Typ Variant aber einem Element ein Feld zugewiesen wird, kann diese Variantvariable nicht weiteren Variantvariablen zugewiesen werden. Es kommt 'Type mismatch'.
Eigentlich sind die Zuweisungen intern doch nur Zeiger, so dass Adresse auf Adresse verweisen müsste oder?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: LotusScript-Fehler
« Antwort #1 am: 12.04.12 - 23:04:17 »
Jürgen, Du hast da ein fixed Array und ein Variant. Und *das* ist Dein Problem.

Bernhard

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: LotusScript-Fehler
« Antwort #2 am: 13.04.12 - 08:01:21 »
Eigentlich sind die Zuweisungen intern doch nur Zeiger, so dass Adresse auf Adresse verweisen müsste oder?
Nein, das können keine Zeiger sein. Dein Script etwas abgewandelt beweist es:

Dim FieldLong(1) As Long
Dim ScalarVariant As Variant
   
FieldLong(0) = 1
FieldLong(1) = 2

ScalarVariant = FieldLong
ScalarVariant (0) = 3
   
Print FieldLong (0) '-> 1
Print ScalarVariant (0) '-> 3

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: LotusScript-Fehler
« Antwort #3 am: 13.04.12 - 08:40:38 »
Zitat
FieldVariant(1) = FieldLong
ScalarVariant = FieldVariant
FieldLong ist vom Typ "Array Of Long" und FieldVariant ist somit vom Typ "Array Of Array Of Long"

Wie Peter schon schrieb, werden Arrays kopiert, das geht aber nur, wenn das Array keine weiteren Arrays enthält
(Bei Listen ist es änlich)

Wenn du mit Zeigern arbeiten willst, so musst du mit Objekten arbeiten (welche das Array als Member haben)
Letzteres ist sowieso komfortabler, weil man ins Objekt Methoden wie Add etc einbauen kann

Code
Public Class ObjArray
   private data() as Variant
   private length as long ' Länge des Arrays (muss immer <= ubound(data) sein)


   public sub add(toAdd)
      '... sicherstellen, dass noch ausreichend Platz in Data ist, wenn nicht, dann vper redim vergrößern
      ' aber nicht nur um ein Element, sondern gleich um mehrere (wg. Performance)
      data(length) = toAdd
      length = length + 1
   end sub

end class

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Jürgen Schomann

  • Gast
Re: LotusScript-Fehler
« Antwort #4 am: 13.04.12 - 10:17:50 »
Vielen Dank für eure Antworten. Haben mir fürs Verständnis sehr geholfen.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz