Domino 9 und frühere Versionen > ND8: Entwicklung

Fehler bei einer Schleife

(1/1)

Klafu:
Hallo zusammen,

ich hab folgendes Script

Kurzfassung:

--- Code: ---
Dim Enddatum As NotesDateTime
Dim EndDateTimeA(49) As  Variant

RepeatDateTime = doc.RepeatInstanceDates(0)
Datum = Left(RepeatDateTime, 10)
ende = TimeNumber(20,00,00)
Set Enddatum = New NotesDateTime (Datum + " " + ende)

ForAll z In EndDateTimeA
Set z = Enddatum
Call Enddatum.Adjustyear(1)
End ForAll
--- Ende Code ---

Vermutlich total bekloppt was ich wiedermal mache, aber in das Array EndDateTimeA schreibt er mir nun 50 mal den selben Eintrag.
Er geht zwar alle einzeln und Schritt für Schritt durch und zählt auch die Jahre hoch, aber er schreibt das neue Enddatum in jedes der 0-49 Teile des Arrays.

Was mach ich falsch?

Gruß Chris

Werner Götz:
Hallo Chris,

durch das "Set z = Enddatum" hast Du 50 Referenzen auf das selbe Objekt.
Wenn sich das Objekt ändert, sieht das in allen Referenzen gleich aus.

Du müsstest also innerhalb der Schleife neue Objekte auf Basis von Enddatum anlegen.
Oder aber in das Array nur die LSLocalTime schreiben: "x = Enddatum.LSLocalTime".

Viele Grüße
-Werner

Klafu:
Ich hab es aber auch schon mit einer anderen Schleife probiert

ArrayNr = 0
Do Until ArrayNr = "50"
        Set EndDateTimeA(ArrayNr) = Enddatum
        ArrayNr = ArrayNr +1
        Call Enddatum.Adjustyear(1)
Loop


Das hatte das selbe Ergebnis. Fehlt hier auch die richtige Referenz?

Und mit LSLocalTime ...  :o ... es.... sieht aus wie es soll!
Schonmal dafür vielen Dank, Werner!!  :D


Chris

marschul:
Du hast die gleichen Probleme nur in eine andere Verpackung (Schleife) gelegt.

Das Set EndDateTimeA(ArrayNr) = Enddatum ist, wie Werner schreibt, das Setzen auf eine Referenz, die in jeder Wiederholung zwar geändert wird, da es aber nur eine Referenz ist, zieht diese Änderung in alle Werte Deines Arrays.

Wenn Du tatsächlich NotesDateTime-Objekte in das Array packen willst, musst Du diese jeweils als eigenständige Objekte behandeln, z.B.

Set EndDateTimeA(ArrayNr) = New NotesDateTime(Enddatum.DateOnly)

Klafu:
Okay. Danke für die Erklärung Marco!  :)

Chris

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln