Domino 9 und frühere Versionen > ND8: Entwicklung

Fehler beim Erzeugen von einem Array of DateTime

(1/3) > >>

schroederk:
Hallo,

ich versuche ein Array mit Datumwerten zu füllen.
Vorgabe ist ein Von- und ein Bis-Datum. In einer Schleife soll dann das Array gefüllt werden:


--- Code: --- Dim aDates() As NotesDateTime, vdate As NotesDateTime, bdate As NotesDateTime
Dim i As Integer
Set vdate = New NotesDateTime("15.03.2011")
Set bdate = New NotesDateTime("17.03.2011")
ReDim aDates(0)
Set aDates(0) = vdate
vdate.Adjustday(1)
i = 0
While vdate.Dateonly <= bdate.Dateonly
If (Weekday(vdate.Dateonly) <> 7) And (Weekday(vdate.Dateonly) <> 1) Then
i = i + 1
ReDim Preserve aDates(UBound(aDates) + 1)
Set aDates(UBound(aDates)) = vdate
End If
vdate.Adjustday(1)
Wend
Call doc.ReplaceItemValue( "CalendarDateTime", aDates)

--- Ende Code ---

Was aber herauskommt ist dreimal der 18.03.2011.
Als wenn er beim Eintragen in den Array nicht den tatsächlichen Wert, sondern die Referenz auf die Variable einträgt.
Beim Beenden der Schleife entspricht vdate ja dem 18.03.2011.

Muss ich hier mit einer Hilfsvariable arbeiten oder wie?

Axel:

--- Zitat von: schroederk am 18.02.11 - 15:38:03 ---Als wenn er beim Eintragen in den Array nicht den tatsächlichen Wert, sondern die Referenz auf die Variable einträgt.

--- Ende Zitat ---

Du arbeitest hier mit einer Instanz der Klasse NotesDateTime und da wird nicht der Wert im Array abgelegt sondern, wie du bereits richtig erkannt hast, nur ein Verweis.


--- Zitat von: schroederk am 18.02.11 - 15:38:03 ---Muss ich hier mit einer Hilfsvariable arbeiten oder wie?

--- Ende Zitat ---

Du darfst dein Array nicht auf die Klasse NotesDateTime beziehen sondern z.B. als Variant.

Axel
 

schroederk:
Bei einem
Dim aDates() As Variant
ist jetzt CalendarDateTime ein empty String.  :-:

marschul:
Oder:


--- Code: ---Set aDates(UBound(aDates)) = New NotesDateTime(vdate.DateOnly)
--- Ende Code ---

Bei der letzten Zeile

--- Zitat ---Call doc.ReplaceItemValue( "CalendarDateTime", aDates)
--- Ende Zitat ---
ist mir allerdings neu, dass das funktioniert, da aDates ja NotesDateTime-Objekte enthält und mir war / ist nicht klar, dass diese direkt dem Feld zugeordnet werden können ?!?

Gruß
Marco

Axel:
Ich habe das Ganze mal auf die Schnelle angepasst und in einen Button innerhalb der Maske gelegt und es funktioniert.


--- Code: ---
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument

Dim aDates() As Variant, vdate As NotesDateTime, bdate As NotesDateTime
Dim i As Integer

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document

Set vdate = New NotesDateTime("15.03.2011")
Set bdate = New NotesDateTime("17.03.2011")
Redim aDates(0)
aDates(0) = vdate.DateOnly
vdate.Adjustday(1)
i = 0
While vdate.Dateonly <= bdate.Dateonly
If (Weekday(vdate.Dateonly) <> 7) And (Weekday(vdate.Dateonly) <> 1) Then
i = i + 1
Redim Preserve aDates(Ubound(aDates) + 1)
aDates(Ubound(aDates)) = vdate.DateOnly
End If
vdate.Adjustday(1)
Wend

Call doc.ReplaceItemValue( "CalendarDateTime", aDates)

Call uidoc.Refresh


--- Ende Code ---

Axel

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln