Recordset in Array

Icem@n

Grünschnabel
Hallo zusammen,

ich hab da ein Problem ich benutze (VB6(SP5) und Access 2000)

ich hab ein Projekt wo ich per VB über ODBC eine Verbindung zu einer Datenbank mithilfe eines ADODC herstelle.

nun möchte ich mir das komplette Recordset der jeweiligen Tabelle in ein Array einlesen und dann erst damit arbeiten um das Netzwerk nicht zu belasten.

Code:
Private Sub Form_Load()
Set conn = New ADODB.Connection
conn.ConnectionString = "Data Source = Fernwartung"
conn.Open
Set rs = New Recordset
Set rs.ActiveConnection = conn
rs.Source = "firma"
rs.Open
Set DataList1.RowSource = Adodc1
    DataList1.ListField = "Firma_name"
rs.Close
conn.Close
End Sub

der zugriff auf das Recordset funktioniert ja und ich kann mir auch die eine Spalte
in einen datalist anzeigen.

Ich komme aber einfach nicht darauf wie man das Recordset vorher in ein Array liest und danach mit dem Array arbeitet um das Datalist zu füllen

Ich bin noch am Anfang was VB angeht und die 4 Wochen in der Umschulung waren meine ersten Schritte in VB bloss da wurde sowas halt nicht angesprochen.

kann mir BITTE jemand weiterhelfen :rolleyes:

Mfg Icem@n
 
Also so viel Anhnung hab ich davon auch nicht. Wenn ich dich aber richtig verstanden habe, willst du die ganze Tabelle in ein Array einlesen.
Ich würde das über eine einfache Schleife realiesieren.

Code:
for i = 0 to rs.RecordCount
   array(i) = rs.fields("Firma_name")
   rs.MoveNext
next i

Wenn ich jetzt nicht irgendwo nen Tipp- oder nen groben Denkfehler habe, müsste das hinhauen.
 
das funktioniert so nicht muss man array vorher deklarieren?
weil der zeigt mir nen Syntaxerror bei Array.

und ich muss die komplette Tabelle in das Array einlesen weil ich mit den anderen Werten später noch arbeiten muss, muss man die dann in einer Schleife
zeile für Zeile einlesen und dann die einzelnen Spalten mit Platzhalter(z.b. ein Komma) kennzeichnen?
 
Klar musst du das Array deklarieren. Das ist ja auch nur das Prinzip, wie ich es machen würde.

Wenn du die ganze Tabelle einlesen willst, kannst du entweder die ganze Zeile einlesen oder direkt die einzelnen Spalten. Ich persönlich würde dann direkt die Spalten einlesen und diese dann (je nach Typ) in ein Array oder einen selbstdefinierten Datentyp speichern.

Wenn du nur Text einlesen willst, tut es eine zweidimensionales Array auch.

Array(Spalte,Zeile)

Ich hab jetzt die Zeile an zweite Stelle gesetzt, weil ich davon ausgegangen bin, dass die Anzahl der Zeilen im vorraus nicht bekannt sind.

Ich weiß ja nicht, wie weit du jetzt damit klar kommst. Wenn du's nicht hinbekommst, meld dich einfach nochmal!
 
also so richtig verstanden hab ich es noch nicht

Ich habe 2 Spalten in der Tabelle(firma_id, Firma_name) die ich mit in das Array einlesen will daher brauch ich ja auch nur ein zweidimensionales Array.
damit handelt das es sich um ein zweidimensionales Array

Code:
i = Array(1, 2)

oder?

vielleicht könntest du mir ja ein kleines Beispiel aufzeigen wie ich das Recordset in ein Array einlese und dann halt alle z.b. Firma_name einträge an die Listbox übergeben, währe echt dankbar dafür weil ich da irgendwie nicht so richtig Hintersteige.:sad:
 
Code:
dim RecordSet(1 to 2,1)
for i = 0 to rs.RecordCount
   redim preserve RecordSet(1 to 2, i+1) 'Array neu dimensioniert
   RecordSet (1,i) = rs.fields("firma_id")
   RecordSet(2,i) = rs.fields("firma_name")
   rs.MoveNext
next i

Damit müsste die Tabelle im Array sein! (kanns aber nicht testen)
Jetzt kannst du das Array einfach auslesen.
 
@Zorck danke erst mal für deine Geduld,


Code:
ReDim Preserve RecordSet(1 To 2, i + 1) 'Array neu dimensioniert

da wirft er beim Kompilieren den Fehler

Fehler beim kompilieren: Array bereits Dimensioniert

kannst du damit was anfangen?
 
Ups!
Wie gesagt - konnte nicht testen.
Hab sowas schon lange nicht mehr gemacht!

Nimm mal das "dim RecordSet(1 to 2,1)" raus und ersetz es mit dim RecordSet().
 
Zuletzt bearbeitet:
mit Hilfe von Zorck(dickes Dankeschön nochmal) bin ich jetzt gut weitergekommen.
Hab jetzt aber noch ein kleines Problem

hier ist erst mal der Code

Code:
Option Explicit
Dim rs As ADODB.RecordSet
Dim conn As ADODB.Connection
Dim i, k

Private Sub DataList1_DblClick()
MsgBox "Test"
End Sub

Private Sub Form_Load()

Set conn = New ADODB.Connection
conn.ConnectionString = "Data Source = Fernwartung"
conn.Open
Set rs = New RecordSet
Set rs.ActiveConnection = conn
rs.Source = "Select * from firma"
rs.Open
Dim RecordSet()
i = 0
Do While Not rs.EOF
    ReDim Preserve RecordSet(1 To 2, i)
    RecordSet(1, i) = rs.Fields("firma_id")
    RecordSet(2, i) = rs.Fields("firma_name")
    i = i + 1
    rs.MoveNext
Loop

For k = 0 To 2                                      ' Array in die Listbox schreiben 
   List1.AddItem (RecordSet(2, k))
Next k

rs.Close
conn.Close

mein Problem ist die zuweisung der Einträge aus dem Array in die Listbox
wenn ich anstatt

Code:
For k = 0 To 2 
   List1.AddItem (RecordSet(2, k))
Next k

ich weiß ja das da nur 3 einträge sind daher hab ich einfach mal 2 für 3 durchläufe genommen (0,1,2)

wenn ich das schreibe

Code:
For k = 0 To  i
   List1.AddItem (RecordSet(2, k))
Next k

dann zeigt mir der Kompiler einen Fehler das er außerhalb des index ist was mir ja auch klar ist weil er nicht weiß wieviel Einträge das array hat. Wie müsste die schleife aussehen damit ich vorher überprüfe wieviele Einträge das Array hat?
 
Zuletzt bearbeitet:
Der Zähler für i müsste doch immer um genau eins größer sein als die Anzahl der Arrayeinträge. Also einfach:
Code:
for k = 0 to i-1
   .....
next k
 
Zurück