Ms access 如何从MS Access数据库中获取表名?

Ms access 如何从MS Access数据库中获取表名?,ms-access,Ms Access,Microsoft SQL Server和MySQL有一个我可以查询的信息模式表。但是,它不存在于MS Access数据库中 我可以使用类似的工具吗?获取表格列表: SELECT Table_Name = Name, FROM MSysObjects WHERE (Left([Name],1)<>"~") AND (Left([Name],4) <> "MSys") AND ([Type] In (1, 4, 6))

Microsoft SQL Server和MySQL有一个我可以查询的信息模式表。但是,它不存在于MS Access数据库中


我可以使用类似的工具吗?

获取表格列表:

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

Jet/ACE引擎可以获得与SQL-92信息模式非常接近的模式信息,这就是我假设您所说的通过OLE DB提供程序“访问”的意思

见:


您可以在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

From:

要根据Ilya的答案进行构建,请尝试以下查询:

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 

因为包含了一个额外的表,它似乎是某种类型的系统表。

下面是一个更新的答案,它使用数据访问对象DAO在Access 2010 VBA中工作。表的名称保存在TableDef.name中。所有表定义的集合保存在TableDefs中。下面是一个快速循环表名的示例:

SELECT 
Name 
FROM 
MSysObjects 
WHERE 
(Left([Name],1)<>"~") 
AND (Left([Name],4) <> "MSys") 
AND ([Type] In (1, 4, 6)) 
ORDER BY 
Name
Dim db as Database
Dim td as TableDef
Set db = CurrentDb()
For Each td In db.TableDefs
  YourSubTakingTableName(td.Name)
Next td

最好不要和msyso和IMHO乱搞

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

无法读取记录;“MSysObjects”没有读取权限。该getSchema文章不再存在。此页面上有多个答案,为什么要回溯?为什么是c?为什么是WayBack?这就是我在链接的博客所有者删除他的博客并重新启动它后发现原始内容的方式。为什么是c?这就是博客所有者和编辑我文章的人一年前选择做的事情。我只是在修复一个断开的链接。你说得对。。。我刚刚测试了hype8912的编辑,他错了。它在2007年起作用。回复!仅适用于旧Access版本。MsysObjects是不受支持的系统表,不应使用。在MS Access之外对这些表的权限可能非常偶然。MsysObjects是不受支持的系统表,不应使用。在MS Access之外对这些表的权限可能非常危险