Microsoft SQL Server和MySQL有一个我可以查询的INFORMATION_SCHEMA表。但是,它在MS Access数据库中不存在。
我可以使用等效物吗?
答案 0 :(得分:57)
以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
因为有一个额外的表,它似乎是某种系统表。
答案 1 :(得分: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
答案 2 :(得分:5)
以下是使用数据访问对象(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
答案 3 :(得分:2)
可以通过OLE DB提供程序为Jet / ACE引擎(我假设您的意思是“访问”)获取与SQL-92 INFORMATION_SCHEMA非常接近的架构信息。
请参阅:
答案 4 :(得分: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
答案 5 :(得分:0)
SELECT
Name
FROM
MSysObjects
WHERE
(Left([Name],1)<>"~")
AND (Left([Name],4) <> "MSys")
AND ([Type] In (1, 4, 6))
ORDER BY
Name
答案 6 :(得分:0)
最好不要乱用msysObjects(恕我直言)。
{{1}}
答案 7 :(得分:0)
我需要稍微修改 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。