VBS: Array in Array a la Java Script möglich?

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.

Hallo.

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);

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??

Möglicherweise hilft Dir das hier weiter:

Public Type typFeld1
 Feld1\_0() As Currency
 Feld1\_1() As Currency
 Feld1\_2() As Currency
End Type

Public Feld1 As typFeld1

Public Sub InitArray()
 With Feld1
 ReDim .Feld1\_0(0 To 1)
 ReDim .Feld1\_1(0 To 7)
 ReDim .Feld1\_2(0 To 2)
 End With
End Sub

Kannst Du ja 'mal in Augenschein nehmen.

VG
Carsten

Hallo Carsten!

Erst einmal vielen Dank für dein Posting.

Leider hilft mir das auch nicht weiter, da es in VBS nur einen Datentyp (den Typ Variant) gibt und ich somit bereits bei der Zuweisung in Form von:

Public Feld1 As typFeld1

diese Fehlermeldung (Variablenname angepasst) erhalte:

Kompilierungsfehler in Microsoft VBScript (0x800A0401)
Anweisungsende erwartet
/Neu5/s\_incl/zentrles.asp, Zeile 65, Spalte 13
public Preis As Currency
------------^

Somit kann ich diesen Lösungsansatz leider nicht gehen.