it-swarm.com.de

Wie kann ich Tabellennamen aus einer MS Access-Datenbank erhalten?

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?

29
luntain

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.

56
BIBD

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

9
Fionnuala

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
5
Pete

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:

OpenSchema-Methode (ADO)

Unterstützte Schema-Rowsets

2
onedaywhen

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
1
Ilya Kochetov
SELECT 
Name 
FROM 
MSysObjects 
WHERE 
(Left([Name],1)<>"~") 
AND (Left([Name],4) <> "MSys") 
AND ([Type] In (1, 4, 6)) 
ORDER BY 
Name
0
Syed Daud

Am besten nicht mit msysObjects (IMHO).

CurrentDB.TableDefs
CurrentDB.QueryDefs
CurrentProject.AllForms
CurrentProject.AllReports
CurrentProject.AllMacros
0
Jim