Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Klafu am 15.03.12 - 15:28:30

Titel: Fehler bei einer Schleife
Beitrag von: Klafu am 15.03.12 - 15:28:30
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

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
Titel: Re: Fehler bei einer Schleife
Beitrag von: Werner Götz am 15.03.12 - 15:51:57
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
Titel: Re: Fehler bei einer Schleife
Beitrag von: Klafu am 15.03.12 - 16:08:27
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

Titel: Re: Fehler bei einer Schleife
Beitrag von: marschul am 16.03.12 - 09:49:21
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)
Titel: Re: Fehler bei einer Schleife
Beitrag von: Klafu am 19.03.12 - 10:57:45
Okay. Danke für die Erklärung Marco!  :)

Chris