[vb6] array erweitern

Wie kann ich einen array um indexe erweitern?
zb:

Dim debugvar() As Variant
debugvar = Array(0, „eins“)
debugvar(1) = „zwei“
debugvar(2) = „drei“

fehler
out of range

ich möchte einen array füllen von dem ich nicht genau weiss wie gross er wird . Wie geht das?
dnake
Roland

Hallo Roland,

Wie kann ich einen array um indexe erweitern?

Dim ar(1) As string
ar(0) = "Erster String"
ar(1) = "Zweiter String"
ReDim Preserve ar(2)
ar(3) = "Dritter String"
Redim Preserve ar(Ubound(ar()) + 1)
ar(4) = "Vierter String"

Das Preserve beim Dim verhindert, dass die bereits gespeicherten Werte ‚verloren‘ gehen.

Gruss
Thomas

Da bin ich doch glatt mit den Indizes durcheinandergeraten :wink:

So ists richtig:

Dim ar(1) As string
ar(0) = "Erster String"
ar(1) = "Zweiter String"
ReDim Preserve ar(2)
ar(2) = "Dritter String"
Redim Preserve ar(Ubound(ar()) + 1)
ar(3) = "Vierter String"

danke für die antwort
hm, seltsam seltsam,
wie kann ich das automatisch machen?
sagen wir mal ich bekomme einen Recordset dessen grösse ich nicht kenne den ich aber trotzdem in einen array schreiben möchte.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

danke für die antwort
hm, seltsam seltsam,
wie kann ich das automatisch machen?
sagen wir mal ich bekomme einen Recordset dessen grösse ich
nicht kenne den ich aber trotzdem in einen array schreiben
möchte.

Bei unbekannter Größe des Recordsets empfiehlt sich folgendes Vorgehen:

Deklarationsteil des Programms:

Dim ar(0) As String

dann folgen die Verbindung zur Datenbank und die Abfrage. Ergebnis steht im Recorset (rs)

Counter = 0
While Not(rs.EOF)
 ReDim Preserve ar(Counter)
 ar(Counter) = rs.Fields("Feldname).Value
 Counter = Counter + 1
 rs.MoveNext
Wend

Wenn alles unbekannt ist, kannst Du die Dimensionen des Arrays mit UBound bzw. LBound (wenn jemand so wahnsinnig war und option base geändert hat :wink:) ermitteln.

wobei man sich konkret fragen sollte, ob das Umspeichern in ein Array überhaupt notwendig ist.

Darüber hinaus: im Fall eines Recordsets weisst du ja, wie groß dein Array werden muss - das dann jeweils zeilenweise zu Redimmen ist nun auch nicht gerade genial!

Gruß aud dem Norden
Reinhard Kraasch

1 Like

geht noch einfacher
Hallo Thomas!

ich korrigiere ungern Code von „Kollegen“, aber diesmal tue ich es:

Dim ar() As String
redim ar(rs.recordcount-1)

Die Anzahl der Datensätze ist nämlich immer bekannt.

Grüße

Gollum

Hallo

ich korrigiere ungern Code von „Kollegen“, aber diesmal tue

ich auch :smile:

Die Anzahl der Datensätze ist nämlich immer bekannt.

Nicht immer, gewisse Cursors nämlich nicht.

Gruss