【发布时间】:2010-09-17 02:35:46
【问题描述】:
Microsoft SQL Server 和 MySQL 有一个我可以查询的 INFORMATION_SCHEMA 表。但是它不存在于 MS Access 数据库中。
有没有我可以使用的等价物?
【问题讨论】:
标签: ms-access
Microsoft SQL Server 和 MySQL 有一个我可以查询的 INFORMATION_SCHEMA 表。但是它不存在于 MS Access 数据库中。
有没有我可以使用的等价物?
【问题讨论】:
标签: 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
【讨论】:
设计为非常接近 SQL-92 INFORMATION_SCHEMA 的架构信息可以通过 OLE DB 提供程序为 Jet/ACE 引擎(我假设您的意思是“访问”)获得。
见:
【讨论】:
您可以在 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
【讨论】:
要以 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
由于包含了一个额外的表,它似乎是某种系统表。
【讨论】:
SELECT
Name
FROM
MSysObjects
WHERE
(Left([Name],1)<>"~")
AND (Left([Name],4) <> "MSys")
AND ([Type] In (1, 4, 6))
ORDER BY
Name
【讨论】:
这是使用数据访问对象 (DAO) 在 Access 2010 VBA 中工作的更新答案。表的名称保存在 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
【讨论】:
最好不要弄乱 msysObjects (恕我直言)。
CurrentDB.TableDefs
CurrentDB.QueryDefs
CurrentProject.AllForms
CurrentProject.AllReports
CurrentProject.AllMacros
【讨论】:
我需要稍微修改 BIBD 发布的 SQL(需要通过在 from 子句中将 sys. 添加到 MSysObjects 来完全质量表名。
String sqlString = "";
sqlString += "SELECT MSysObjects.Name AS table_name \n";
sqlString += "FROM sys.MSysObjects \n";
sqlString += "WHERE (((Left([Name],1))<>\"~\") \n";
sqlString += " AND ((Left([Name],4))<>\"MSys\") \n";
sqlString += " AND ((MSysObjects.Type) In (1,4,6)) \n";
sqlString += " AND ((MSysObjects.Flags)=0)) \n";
sqlString += "order by MSysObjects.Name \n";
https://github.com/NACHC-CAD/access-to-csv-tool 提供了完整的工作示例。此示例还显示了使用 jdbc 连接到 MS Access 数据库并使用 Apache Commons CSV 将所有表导出为 csv。
【讨论】: