Also ich habe folgendes Problem.
Um in Java Script Multidimensionale Arrays zu erstellen, gehe ich so vor:
var Feld1 = new Array(3);
Feld1[0] = new Array(2);
Feld1[1] = new Array(8);
Feld1[2] = new Array(3);
…usw.
Das ergibt „Speicherzellenmäßig“ folgendes „Speichernutzungsbild“:
(A = erstes Arrray [Zeilen], B = zweites Array [Spalten]
A\B 1 2 3 4 5 6 7 8 ...
0 X X
1 X X X X X X X X
2 X X X
Es würden also (nur) 13 Speicherzellen belegt (und reserviert) werden. Und auch beim „Auslesen“ müsste man nur 13 „Schleifendurchläufe“ benötigen, da man die 2. Arraybereiche nur nach der tatsächlichen Länge abarbeiten muss.
Da nach meinem Wissen unter VBS nur mehrdimensionale Arrays in der Form genutzt und (vernünftig) behandelbar sind:
DIM I, J, Feld1()
Redim Preserve Feld1(3,8)
For I = 0 To UBound(Feld1, 1)
For J = 0 To UBond(Feld1, 2)
Feld(I,J) = …
Next
Next
würde sich dieses Speichebelegungsbild ergeben:
A\B 1 2 3 4 5 6 7 8 ...
0 X X X X X X X X
1 X X X X X X X X
2 X X X X X X X X
wo man zwar nur 13 Zellen „benötigt“, aber ganze 24 belegen (reservieren) muss!!
Und auch das „Auslesen“ würde hier 24 Schleifendurchläufe erfordern, da bei der Dimensionierung die Länge der 2. Arraybereiche für alle 1. Arraybereiche gilt und diese damit (egal ob notwendig oder nicht) auf diese „Einheitsgröße“ dimensioniert werden!
Nun ist meine Frage, ob es nicht möglich ist auch mit diesen „Arrays in Arrays“ unter VBS eben so effektiv arbeiten zu können und wenn ja, wie?? Besonders das wie ist es, wo ich leider auch nirgends wo Informationen finden Konnte.
Das erstellen habe ich ja noch in der Form „hin bekommen“:
Dim I, J, Werte()
Redim Preserve Werte(8)
For I = 0 to UBound(Werte)
DIM UWert()
ReDim Preserve UWert(Länge2)
Werte(I) = UWert
next
jedoch ein Auslesen in der Form :
Dim I, J
For I = 0 to UBound(Werte,1)
For J = 0 to UBound(Werte(I))
…
…
next
next
scheitert Grundsätzlich an zweiten „UBound“! Auch ein „UBound(Werte(I),1)“ oder ein „UBound(Werte,2)“ und so weiter funktionieren nicht.
Wie kann man (ich) das Problem lösen?
Übrigens soll das Script Serverseitig laufen und Das Array aus einer Access-Datenbank die Ergebnisse einer SQL-Abfrage in 3 „Dimensionen“ aufnehmen. Dabei sind die ersten beiden Dimensionen von Konstanter Länge (Größe). Dafür kann die dritte „Dimension“ bis zu 36 Werte (oder mehr) enthalten.
Da jedoch eine anschließende (mehrfache) Auswertung der Array-Zellen, von möglicher Weiße mehreren Nutzern gleichzeitig erfolgt (erfolgen kann) kann dieses zu einer erheblichen Serverlast führen.
Übrigens habe ich es bereits (völlig erfolglos) mit Recordset versucht. Aber da führen Zahlenvergleiche von adCurrency (aus ADOVBS.inc) Werten, mit Werten die per FormatCurrency erstellt werden, zu völlig „abstrusen“ Ergebnissen. So ist da z.B. der Wert „79,00“ größer als der Wert „129,00“. Und es war mir bisher unmöglich die Ursache (vermutlich weil 7 [von 79] größer ist als die 1 [von 129]) zu finden und zu beseitigen.