Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

Zugriff auf Acces mit ADO

Betrifft: Zugriff auf Acces mit ADO
von: NorbertK
Geschrieben am: 22.04.2003 - 22:39:27

Hallo ihr Excelexperten (oder vielleicht besser Office-Kracks)!

Auf eine Datenbank mittels ADO zuzugreifen und die Werte aus einer AccessTabelle in ein Excelformular zu übertragen ist mir schon gelungen. Die Sache hat nur einen Haken: der jeweilige Name der Tabelle (Recordset) in der Datenbank war immer schon bekannt. Alle Beispiele, die ich Handbüchern und Foren gefunden hab, gehen auch davon aus, das der Tabellenname bekannt ist.

Wie komme ich an den oder die Namen der in einer Datenbank enthaltenen Tabellen ran. (1. Idee mit der Name-Eigenschaft klappt nicht).
Um es noch mal an einem Beispiel zu verdeutlichen:
Datenbank: "Schüler.mdb"
enthält folgende Tabellen: Klasse_7a, Klasse_7b, Klasse_8c, Unterrichtsfächer .....

Die Namen der Tabellen sollen in ein Excelarbeitsblatt übernommen werden.

Wie könnte das wohl mit dem ADO-Zugriff (oder anders) gehen?

Für einen Tip wäre ich außerordentlich dankbar!
Gruß Norbert


  

Re: Zugriff auf Acces mit ADO
von: andre
Geschrieben am: 23.04.2003 - 05:51:00

hallo norbert,
etwa so - aus einem projekt von mir:


Public Sub proDBOpen()
Dim tabelle
' Initialisieren
Set DB = OpenDatabase("c:\db\nordwind.mdb", True, True)
'  UserForm2.Label1.Caption = DB.Name
'Set RS = DB.OpenRecordset("artikel", dbOpenSnapshot, dbReadOnly)
'dbopentable zur bearbeitung, da funktioniert aber rs.absoluteposition nicht !!
'  RS.MoveLast
'  RS.MoveFirst
'Set crs = DB.OpenRecordset("select count(*) from artikel") 'ausgabe in userform
' muss nicht sein - rs.recordcount !!
  For Each tabelle In DB.TableDefs
    UserForm2.lsttab.AddItem (tabelle.Name)
  Next
'  MsgBox RS.GetRows
'  MsgBox crs.Fields(0)
End Sub

ich habe mal alles unnötige auskommentiert. benutzt wurde userform2 und das listenfeld lsttab.
gruss andre



  

Re: Zugriff auf Acces mit ADO
von: NorbertK
Geschrieben am: 23.04.2003 - 09:34:04

Hallo Andre,

danke für die "frühe" ;-) Antwort.
Mit welchem Datenbank-Modell finktioniert dein Code?

Hier nochmal meine Idee mit dem ADO-Modell:

Sub TestADO_Zugriff()

Dim ADOCnn As ADODB.Connection
Dim ADOTab As ADODB.Recordset

Set ADOCnn = New ADODB.Connection
ADOCnn.Provider = "Microsoft.Jet.OLEDB.4.0"

ADOCnn.Open ("d:\Schüler.mdb")

Set ADOTab = New ADODB.Recordset

' die folgende Idee funktioniert nicht:
'???????????????????????????????????????????????????????
For Each ADOTab In ADOCnn.Recordsets
Debug.Print ADOTab.Name
Next
'????????????????????????????????????????????????????????
ADOCnn.Close
Set ADOCnn = Nothing

End Sub


  

Re: Zugriff auf Acces mit ADO
von: Michael Scheffler
Geschrieben am: 23.04.2003 - 10:15:14

Hi,

Du hast ja auch noch keinen Recordset, den musst Du erst durch Abfrage kreiern. Schau Dir den Quellcode bitte genau an.

So, wie es Andre geschrieben hat, funktioniert es, egal welches DB-Format. Das ist gerade der Witz an ADO.

Aber bei Access funktioniert es gerade!

Gruß

Micha

  

Re: Zugriff auf Acces mit ADO
von: NorbertK
Geschrieben am: 23.04.2003 - 10:58:36

Großer Balken vor meinem Kopf??

Wenn ich mit z. B. "Artikel" den Recordset öffne, dann kenne ich den Namen des Recordsets ja schon. Das ist nicht das Problem.

Wie kriege ich die Namen (oder vieleicht die Anzahl) aller Tabellen einer Datenbank nach Excel, oder wie komme ich da dran?

Viele Grüße Norbert


  

Balken - Ja!
von: Michael Scheffler
Geschrieben am: 23.04.2003 - 11:11:45

>ADOCnn.Open ("d:\Schüler.mdb")
Hier machst Du die Verbindung auf!

>Set ADOTab = New ADODB.Recordset
Hier machst Du keinen Recordset, der mit der Verbindung ADOCnn in irgendeinem Zusammenhang steht!

Das ginge so:
Set ADOTab = ADOCnn.OpenRecordset("DeineTabelle", dbOpenSnapshot, dbReadOnly)
oder mit SQL so:
Set ADOTab = ADOCnn.OpenRecordset("select count(*) from artikel")


Folglich geht das Weitere nicht!
>For Each ADOTab In ADOCnn.Recordsets
>Debug.Print ADOTab.Name
>Next
>'????????????????????????????????????????????????????????
>ADOCnn.Close
>Set ADOCnn = Nothing



  

Re: Balken - Ja!
von: NorbertK
Geschrieben am: 23.04.2003 - 15:51:31

Balken ist weg!

Ich hab's mal mit DAO versucht und bin nach langem Probieren und Studieren zu folgender Lösung gekommen:

Sub TestDAO_Zugriff()
Dim appAc As Access.Application
Dim i As Integer
Dim MDBPfad As String
Dim aktdb As Database
Dim TB As TableDef
MDBPfad = "d:\Schüler.mdb"

Set appAc = CreateObject("Access.Application")
appAc.OpenCurrentDatabase MDBPfad

Set aktdb = CurrentDb

For Each TB In aktdb.TableDefs
Debug.Print TB.Name
Next

Set appAc = Nothing


End Sub

Darüber bin ich ganz happy.

Vielen Dank an Euch beide, Andre und Michael!

Viele Grüße und einen schönen sonnigen Tag noch
Norbert

  

Re: Balken - Ja!
von: Michael Scheffler
Geschrieben am: 23.04.2003 - 16:29:35

Hallo Norbert,

es ligt nicht an ADO. Ich würde auch keein DAO nutzen, denn ADO ist das Moderne, Kommende. Goolge mal und Du wirst fündig z.B.:

Schau mal hier steht was"J

Oder hier"J

Gruß

Micha

  

Re: Balken - Ja!
von: andre
Geschrieben am: 23.04.2003 - 17:13:51

hallo allerseits,
schön, dass es geklappt hat. kann mich leider nicht immer melden - am "normalen" arbeitstag geht's nur kurz nach dem aufstehn und dann abends wieder - sofern nicht die family ihre ansprüche anmeldet.
gruss andre

 

Beiträge aus den Excel-Beispielen zum Thema "Zugriff auf Acces mit ADO"