Tabellen einer Access DB auslesen

Hallo zusammen

ich versuche vergeblich die Tabellen einer MDB auszulesen… irgendwie krieg ich das nicht hin…

in VB/A sieht es so aus:

Private Sub getDBTables()
 Dim cnn As New ADODB.Connection
 Dim rs As New ADODB.Recordset
 Dim i As Integer

 On Error Resume Next
 cnn.Provider = "Microsoft.Jet.OLEDB.4.0"
 cnn.Properties("Data Source") = mDBfile
 cnn.Open
 If Not Err.Number = 0 Then
 MsgBox ("Fehler beim öffnen der Datenbank!")
 Exit Sub
 End If
 Set rs = cnn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "TABLE"))
 lstDBTables.Clear
 Do While Not rs.EOF
 lstDBTables.AddItem rs.Fields("TABLE\_NAME").Value
 rs.MoveNext
 Loop
 rs.Close
 cnn.Close
End Sub

in VB.NET sieht es bisher so aus:

<small><br>Dim cnn As OleDb.OleDbConnection<br> Dim mdb As New clsMDBHandler<br> Dim DT As New DataTable<br><br> If mFilename.Length = 0 Then<br> Me.DialogResult = Windows.Forms.DialogResult.Cancel<br> Me.Close()<br> Else<br> Cursor = Cursors.WaitCursor<br> mdb.DB_File = New IO.FileInfo(mFilename)<br> End If<br> Try<br> cnn = mdb.GetConnection()<br> cnn.Open()<br> DT = cnn.GetSchema("COLUMNS", New String() {Nothing, Nothing, Nothing, "TABLE_NAME"})<br> for each w in dt.columns<br> lstmdb.items.add w<br> next w<br> Catch ex1 As Exception<br> 'fehler<br> Finally<br> cnn.Close()<br> cnn.Dispose()<br> cnn = Nothing<br><br> Cursor = Cursors.Arrow<br> End Try<br> End Sub<br></small>

w ist nicht deklariert wird vom typ datarows, bitte nicht wunder!

Ich versuche einfach nur die Datenbank zu öffnen Tabellen holen schließen fertig. Das alles soll in einer listbox ausgegeben werden! also ohne datasets und ohne kompliziert, auch habe ich nicht vor die listbox an die DB zu binden.
Hinter clsMDBHandler verbirgt sich ein Klasse die die verbindung herstellt, das funktioniert soweit auch alles!
Hab es in meiner Verzweiflung schon mit ADOX probiert aber beim aufruf von

cat.activeConnection = cnn

erhalte ich eine fehlermeldung (grad vergessen welche, klingt aber nach einem Typenumwandlungsproblem)
Wobei ich aber so wenig wie möglich zusätzliche referenzen in das Projekt einbinden möchte (also möglichst ohne ADOX)

vielen Dank schon mal fürs Roman lesen und ich hoffe mir kann wer bei meinem problemchen helfen.

lg Enrico

Hallo Enrico,

ich versuche vergeblich die Tabellen einer MDB auszulesen…
irgendwie krieg ich das nicht hin…

Ach so schwer ist das nicht :wink:

w ist nicht deklariert wird vom typ datarows, bitte nicht
wunder!

Ich versuche einfach nur die Datenbank zu öffnen Tabellen
holen schließen fertig. Das alles soll in einer listbox
ausgegeben werden! also ohne datasets und ohne kompliziert,
auch habe ich nicht vor die listbox an die DB zu binden.

Wieso willst Du die DB nicht an die Listbox binden? Da ist vieles einfacher :smile:

Hinter clsMDBHandler verbirgt sich ein Klasse die die
verbindung herstellt, das funktioniert soweit auch alles!

Hab es in meiner Verzweiflung schon mit ADOX probiert aber
beim aufruf von

cat.activeConnection = cnn

erhalte ich eine
fehlermeldung (grad vergessen welche, klingt aber nach einem
Typenumwandlungsproblem)

Eine Fehlerbeschreibung wäre schon nicht schlecht!

Wobei ich aber so wenig wie möglich zusätzliche referenzen in
das Projekt einbinden möchte (also möglichst ohne ADOX)

vielen Dank schon mal fürs Roman lesen und ich hoffe mir kann
wer bei meinem problemchen helfen.

Vom Prinzip her, müsstest du so an Deine Tabellen kommen :smile:

 Dim DT As New DataTable 'Daten werden in einer Datatable abgelegt
 Dim Con As OleDb.OleDbConnection = 'Deine Connection zur DB
 If Con.State = ConnectionState.Closed Then Con.Open() 'Wir öffnen die Verbindung
 DT = Con.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
 'In DT haben wir nun das Schema
 For Each DR As DataRow In DT.Rows 'Wir durchlaufen alle Ergebnisse
 MsgBox(DR(2).ToString) 'Der Tabellenname steht im 3 Feld, bedenke ist Nullbasierend, also Abfrage mit 2
 Next
 Con.Close() 'wir schliessen die Verbindung
 End Sub

Den Source an Deine Bedürfnisse anzupassen, sollte nun aber nicht das Problem sein, oder?

MfG Alex

Hallo Alex,

vielen vielen Dank :smile: das ist genau das was ich gebraucht hab.

den Rest schaff ich (denke ich) :smile:

Enrico