我如何从MS Access数据库中获取表名?
Microsoft SQL Server和MySQL有我可以查询的INFORMATION_SCHEMA表。 但是它不存在于MS Access数据库中。
有没有相当于我可以使用的?
要build立伊利亚的答案尝试以下查询:
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
因为有一个额外的表格被包括在内似乎是某种系统表格。
您可以在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
这是一个在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
可以通过OLE DB提供程序为Jet / ACE引擎(我假设你的意思是“访问”)获取与SQL-92 INFORMATION_SCHEMA非常接近的模式信息。
看到:
OpenSchema方法(ADO)
支持的模式行集
获取表格列表:
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
最好不要乱用msysObjects(恕我直言)。
CurrentDB.TableDefs CurrentDB.QueryDefs CurrentProject.AllForms CurrentProject.AllReports CurrentProject.AllMacros