Ms access 如何从MS Access数据库中获取表名?
Microsoft SQL Server和MySQL有一个我可以查询的信息模式表。但是,它不存在于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))
我可以使用类似的工具吗?获取表格列表:
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之外对这些表的权限可能非常危险