Domino 9 und frühere Versionen > ND8: Entwicklung

Fehlermeldung: Subscript out of range in loop-Schleife

(1/3) > >>

regedit:
Habe folgendes Problem:
Habe das Text-Feld "Revisionen" mit Mehrfachwerte(mehrere Zeilen) im Hauptdokument. Nun muss ich aus einem Antwort-Dokument auf dieses Feld Revisionen zugreifen und Ergänzungen hinzufügen. Dies wollte ich im querysave des Antwortdoks machen. Da im Feld Revisionen unterschiedliche Anzahl von Werten sein können wollte ich dies mit einer loop-Schleife auslesen, erhalte allerdings am Ende des mehrmaligen Schleifendurchlaufs die Fehlermeldung Subscrip out of range.

Kann mir jemand weiterhelfen?

Gruß
Holger

hier der code:

--- Code: ---Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim session As New NotesSession
Dim db As notesdatabase
Dim responsedoc As notesdocument
Dim parentdoc As notesdocument
Dim tmpRevisionen As Variant
Dim user As String
Dim tmp1 As String
Dim tmp2 As String
Dim i As Integer

user = session.UserName

Set db=session.currentdatabase
Set responsedoc = source.document

Call responsedoc.save(True,True)

Set parentdoc=db.getdocumentbyUNID(responsedoc.UNID(0))

tmpRevisionen=parentdoc.Revisionen


tmp1 = Date$ + " " + Time$ + "   " + "Bearbeitungsdokument hinzugefügt von: " + Chr(10) + "                                         " + user + Chr(10)
tmp2 =tmp1
i = 0

Do Until tmpRevisionen(i) = False
tmp2 = tmp2 + tmpRevisionen(i) + Chr(10)
i= i +1
Loop

parentdoc.Revisionen = tmp2

Call parentdoc.save(True,True)
End Sub

--- Ende Code ---

Driri:
Du willst doch einfach nur einen Wert hinzufügen, oder sehe ich das falsch ?

In dem Fall würde ich den Inhalt des Items "Revisionen" mit Join in einen String pumpen, den neuen Wert dazu verketten und dann den String mit Split wieder in einen Array umwandeln und in das Item zurückschreiben.

Darüber hinaus empfehle ich, für die Verkettung von Strings in Script nicht das "+", sondern das "&" zu verwenden.

Mal schnell runtergeschrieben könnte das dann so aussehen (ohne Gewähr):


--- Zitat ---...
tmp2 = Join(parentdoc.Revisionen, "~~")
tmp2 = tmp2 & "~~" & tmp1

tmpRevisionen = Split(tmp2, "~~")

Call parentdoc.ReplaceItemValue("Revisionen", tmpRevisionen)
Call parentdoc.Save(True, True)
...

--- Ende Zitat ---


DAU-in:
enthält das Item Revisionen denn boolesche Werte? Oder warum prüst du auf false? Und wenn ja, soll er dann abbrechen?

ich würde eine Forall-Scleife nehmen

forall x in revisionen
   tmp2 = tmp2 + x + Chr(10)
end forall

Die hört auf, wenn nix mehr da ist .....

Grüsse

Dau-in


edith: oder appendToTextlist verwenden

Jan Grünklee:
Hallo Holger,

also bei dir wird in tmpRevisionen ein Variant mit mehreren Texteinträgen aus dem entsprechenden Feld gefüllt. Die einzelenen Einträge durchläufst Du. Allerdings wird keiner dieser Werte in deinem Variant je False werden, da es immer Text ist. Quasi würde deine Schleife eine Endlosschleife sein. Der Fehler tritt auf, weil Du irgendwann das Ende der Einträge in Deinem Variant erreicht hast, aber durch das weitere hochzählen auf einen Indexwert zugreifst, den es garnicht gibt.

Machs doch eher so:


--- Code: ---For i = 0 to Ubound ( tmpRevisionen )
      tmp2 = tmp2 + tmpRevisionen(i) + Chr(10)
Next

--- Ende Code ---

Greetz Jan

thomson666:
zum anhängen 1nes Wertes an ein Array würde ich

Redim preserve tmpRevisionen(Ubound(tmpRevisionen)+1)
tmpRevisionen(Ubound(tmpRevisionen)) = neuerWert

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln