2008-10-14 151 views

回答

47

要建立在伊利亞的答案請嘗試以下查詢:

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 

(這一個不加修飾時用一個MDB)

ACCDB用戶可根據需要做這樣的事情

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 

由於還有一個額外的表被包括在內,似乎是某種系統表。

+17

無法讀取記錄; 'MSysObjects'沒有讀取權限。 – 2009-07-05 15:59:20

1

獲取表的列表:

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

僅適用於舊的Access版本。 – 2012-06-25 18:05:41

+0

MsysObjects不受支持的系統表,不應使用。 MS Access以外的這些表上的權限可能非常緊張。 – Fionnuala 2012-06-29 11:52:21

9

您可以在Access中使用的架構。

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 

來源:http://msdn.microsoft.com/en-us/library/aa165325(office.10).aspx

+0

這有助於從Excel中讀取表名,謝謝! – enderland 2013-09-05 16:10:05

0
SELECT 
Name 
FROM 
MSysObjects 
WHERE 
(Left([Name],1)<>"~") 
AND (Left([Name],4) <> "MSys") 
AND ([Type] In (1, 4, 6)) 
ORDER BY 
Name 
5

這是一個在Access 2010 VBA中使用數據訪問對象(DAO)工作的更新答案。該表的名字保存在TableDef.Name中。所有表定義的集合保存在TableDefs中。以下是通過表名循環的一個簡單的例子:

Dim db as Database 
Dim td as TableDef 
Set db = CurrentDb() 
For Each td In db.TableDefs 
    YourSubTakingTableName(td.Name) 
Next td 
0

最好不要亂用msysObjects(恕我直言)

CurrentDB.TableDefs 
CurrentDB.QueryDefs 
CurrentProject.AllForms 
CurrentProject.AllReports 
CurrentProject.AllMacros 
相關問題