Domino 9 und frühere Versionen > ND9: Entwicklung
Array zu groß für Feld
SD:
Hallo!
Ich stocke gerade an einem Problem und bin fast bei einer Lösung, aber leider nicht ganz.
Ich habe ein Array, das ziemlich groß werden kann. Am Ende packe ich dieses Array in ein NotesItem. Bekanntermaßen geht das aber nur bis 64KB.
Ich könnte prinzipiell damit leben kurz vor 64KB aufzuhören den Array zu befüllen, allerdings scheitere ich daran festzustellen, wann es soweit ist.
Eigentlich macht LenB() fast genau das, was ich brauche, aber das scheint nicht mit Arrays zu funktionieren, nur mit Strings und in Strings umwandelbaren Dingen. Die Designer-Hilfe behauptet es ginge auch mit einer "Variant expression that includes a variable name". Was ich habe ist ein Variant, den ich auf die benötigte Größe ReDim'e und dann befülle. Aber LenB() gibt mir einen Type mismatch. "meinItem.Values = meinVariantArray" gibt mir "Notes error: Adding entry will cause text list to exceed 64K. Entry not added.".
Gibt es irgendeine Chance beim Befüllen des Array zu prüfen, ob damit die 64K überschritten werden (und das weitere Befüllen dann gegebenenfalls zu unterlassen)? Sowas wie LenB() für Arrays? Wenn alle Stricke reißen, könnte ich den Array wahrscheinlich jedes mal Imploden, aber ich hatte gehofft das geht irgendwie geschickter.
Gruß
Stefan
Tode:
Müssen die Daten des Feldes irgendwo in einer Ansicht angezeigt werden?
Ansonsten würde ich entweder ein Richtextfeld verwenden, oder NotesItem.IsSummary = False setzen. Dann gehen wesentlich mehr Daten in das Feld.
Wenn das für Dich nicht praktikabel ist, dann errechne Dir doch die Länge Deines Arrays einfach immer selbst.
Jedesmal, bevor Du einen Array- Wert addierst addierst Du dessen Länge auf:
--- Code: ---Dim lngLen as Long
lngLen = lngLen + Len( strToAddToArray )
if lngLen < 60000 then
array(i) = strToAddToArray
Else
'- neues Dokument? Neues Item? was auch immer....
lngLen = 0
End If
--- Ende Code ---
Thomas Schulte:
Es geht, ganz grundsätzlich, auch länger als 64KB wenn man das Array in einen String konvertiert und den dann in einem Richtext Feld speichert. Man verliert dann zwar ein paar Funktionen, vor allem in Ansichten, aber die Daten abspeichern kann man. Und man bringt das auch wieder in einen Script String und vom String aus auch in eine Liste oder ein Variant.
Entgegen der landläufigen Meinung kann einen String Variable in Lotus Script nämlich deutlich mehr as 32/64 KB an Zeichen aufnehmen.
jBubbleBoy:
--- Zitat von: Thomas Schulte am 09.10.17 - 14:16:03 ---Und man bringt das auch wieder in einen Script String und vom String aus auch in eine Liste oder ein Variant.
--- Ende Zitat ---
Damit habe ich schlechte Erfahrung gemacht bzw. werden ab einer bestimmten Größe automatisch Zeilenumbrüche erzeugt.
Richtext zur Anzeige ist OK, wenn man die Daten aber wieder auslesen möchte, dann sollte man das mit mehreren Items und dem Setzten des Summary-Flags tun.
Pyewacket:
Ich stand auch mal vor so einem Problem.
Ich hab das Array 64k-weise in ein Hilfsarray umkopiert und dann dieses
in jeweils einem Item gespechert dessen Name eine fortlaufende Nummerierung hatte.
Also z.B. Array Element 0-200 war dann in item_1 gespeichert, die
Elemente 201-250 waren dann in item_2 usw.
In Item_0 war die Gesamtzahl Arrayelemente gespeichert.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln