Microsoft SQL Server und MySQL verfügen über eine Tabelle INFORMATION_SCHEMA, die ich abfragen kann. Es ist jedoch nicht in einer MS Access-Datenbank vorhanden.
Gibt es ein Äquivalent, das ich verwenden kann?
Um auf Ilyas Antwort aufzubauen, versuchen Sie die folgende Abfrage:
SELECT MSysObjects.Name AS table_name
FROM MSysObjects
WHERE (((Left([Name],1))<>"~")
AND ((Left([Name],4))<>"MSys")
AND ((MSysObjects.Type) In (1,4,6)))
order by MSysObjects.Name
(dies funktioniert ohne Modifikation mit einer MDB)
ACCDB-Benutzer müssen möglicherweise so etwas tun
SELECT MSysObjects.Name AS table_name
FROM MSysObjects
WHERE (((Left([Name],1))<>"~")
AND ((Left([Name],4))<>"MSys")
AND ((MSysObjects.Type) In (1,4,6))
AND ((MSysObjects.Flags)=0))
order by MSysObjects.Name
Da ist eine zusätzliche Tabelle enthalten, die wie eine Art Systemtabelle erscheint.
Sie können Schemas in Access verwenden.
Sub ListAccessTables2(strDBPath)
Dim cnnDB As ADODB.Connection
Dim rstList As ADODB.Recordset
Set cnnDB = New ADODB.Connection
' Open the connection.
With cnnDB
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Open strDBPath
End With
' Open the tables schema rowset.
Set rstList = cnnDB.OpenSchema(adSchemaTables)
' Loop through the results and print the
' names and types in the Immediate pane.
With rstList
Do While Not .EOF
If .Fields("TABLE_TYPE") <> "VIEW" Then
Debug.Print .Fields("TABLE_NAME") & vbTab & _
.Fields("TABLE_TYPE")
End If
.MoveNext
Loop
End With
cnnDB.Close
Set cnnDB = Nothing
End Sub
Von: http://msdn.Microsoft.com/de-de/library/aa165325(office.10).aspx
Hier ist eine aktualisierte Antwort, die in Access 2010 VBA mithilfe von DAO (Data Access Objects) funktioniert. Der Name der Tabelle wird in TableDef.Name gespeichert. Die Auflistung aller Tabellendefinitionen befindet sich in TableDefs. Hier ist ein schnelles Beispiel für das Durchlaufen der Tabellennamen:
Dim db as Database
Dim td as TableDef
Set db = CurrentDb()
For Each td In db.TableDefs
YourSubTakingTableName(td.Name)
Next td
Schemainformationen, die sehr nahe an denen des SQL-92 INFORMATION_SCHEMA liegen, können für die Jet/ACE-Engine (die Sie mit "Zugriff" meinen) über die DB-Provider OLE bezogen werden.
Sehen:
Eine Liste von Tabellen erhalten:
SELECT
Table_Name = Name,
FROM
MSysObjects
WHERE
(Left([Name],1)<>"~")
AND (Left([Name],4) <> "MSys")
AND ([Type] In (1, 4, 6))
ORDER BY
Name
SELECT
Name
FROM
MSysObjects
WHERE
(Left([Name],1)<>"~")
AND (Left([Name],4) <> "MSys")
AND ([Type] In (1, 4, 6))
ORDER BY
Name
Am besten nicht mit msysObjects (IMHO).
CurrentDB.TableDefs
CurrentDB.QueryDefs
CurrentProject.AllForms
CurrentProject.AllReports
CurrentProject.AllMacros