【发布时间】:2011-02-07 10:09:44
【问题描述】:
我们可以使用 sql 找到 msaccess 中的所有表吗?
就像我们在 sqlserver 中所做的那样
select * from sys.tables
在sqlite中
SELECT * FROM sqlite_master where type='table'
【问题讨论】:
我们可以使用 sql 找到 msaccess 中的所有表吗?
就像我们在 sqlserver 中所做的那样
select * from sys.tables
在sqlite中
SELECT * FROM sqlite_master where type='table'
【问题讨论】:
SELECT * FROM MSysObjects WHERE Type=1 AND Flags=0
【讨论】:
OLE DB provider "MSDASQL" for linked server "TEST" returned message "[Microsoft][ODBC Microsoft Access Driver] Record(s) cannot be read; no read permission on 'MSysObjects'.". 我将sa 映射到Admin。获得结果需要什么?
Ms Access 有几个系统表,默认情况下,这些表在表列表中是隐藏的。你可以给他们看。
在 Ms Access 2007 中右键单击表格列表并选择 Navigation Options。在表格底部,您会找到Show System Objects 复选框。检查它,系统表将显示在表列表中。它们都以MSys开头。
或者,可以从应用程序菜单激活选项表单 - 单击按钮 Access options -> 选择 Current Database 并有 Navigation Options 按钮。
现在您可以使用 MsAccess 工具检查所有系统表的结构和内容并生成查询。
正如亚历克斯所回答的,表格信息在MSysObjects
【讨论】:
以下查询帮助我确定了从 MS Access 到 C# 和 SQL Server 的重新设计/迁移范围。
注意:结合Alex K. 和KTys 提供的答案。
在这里发布的信念是它对其他人(或我自己,如果我必须再次这样做)有用
SELECT
SWITCH (
[type]=-32764,'Report' ,
[type] = 1, 'Table, local' ,
[type] = 3, 'obj Containers' ,
[type] = 4, 'Table, link odbc' ,
[type] = 5, 'Query' ,
[type] = 6, 'Table, link access' ,
[type] = 8, 'SubDataSheets' ,
TRUE, [type]
) AS [type name (or #)]
, name AS [Table Name]
FROM
MSysObjects
ORDER BY
2, 3
来自 KTys 的注意警告(型号可能会发生变化)
在select子句中添加, *可以查看其他字段(如connect);他们对我没有帮助。
使用 MS Access 2013 创建/测试
【讨论】:
对于 Access 2013,我使用过
SELECT name FROM MSysObjects WHERE type = 4
【讨论】:
This discussion gives 类型值列表。请注意,MS 不保证版本之间的值相同。
Type TypeDesc
-32768 Form
-32766 Macro
-32764 Reports
-32761 Module
-32758 Users
-32757 Database Document
-32756 Data Access Pages
1 Table - Local Access Tables
2 Access Object - Database
3 Access Object - Containers
4 Table - Linked ODBC Tables
5 Queries
6 Table - Linked Access Tables
8 SubDataSheets
【讨论】:
SELECT name FROM MSysObjects where database <> ''
使用此查询获取所有链接表的名称
【讨论】: