我正在查询MsysObjects表,以便列出我数据库中的对象:
SELECT MsysObjects.Name, MsysObjects.Type
FROM MsysObjects
WHERE (((Left$([Name],1))<>'~') AND ((Left$([Name],4))<>'Msys'))
ORDER BY MsysObjects.Name;
我知道这个值的含义:
-32768 = Form
-32766 = Macro
-32764 = Report
-32761 = Module
1 = Table
5 = Query
6 = Linked Table
但是-32758,-32757和3呢?他们代表哪里?无法在网上找到它。
答案 0 :(得分:17)
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
- http://www.access-programmers.co.uk/forums/showthread.php?t=103811
答案 1 :(得分:4)
我倾向于避免使用系统表。首先,临时对象可以显示在那里并混淆事物。要获得相同的信息,您可以使用:
CurrentDB.TableDefs
CurrentDB.QueryDefs
CurrentProject.AllForms
CurrentProject.AllReports
CurrentProject.AllMacros
这是获取信息的记录方式。建议不要使用未记录的系统表。
答案 2 :(得分:1)
第1步 创建表“AccessObjectType” 列:
填充“AccessObjectType”表:
TypeID TypeStr ShowUser ShowAdmin
-32775 Module False True
-32772 Report True True
-32768 Form True True
-32766 Macro True True
-32764 Report True True
-32761 Module False True
-32758 User False False
-32757 Database Document False False
1 Table (local) True True
2 Access Object - Database False True
3 Access Object - Container False True
4 Table, linked ODB SQL True True
5 Query True True
6 Table, Linked Access Excel True True
7 Type 7 True True
8 SubDataSheet True True
如果您愿意,可以创建另一个名为“SimpleType”的列,将1,4和6分组为简单类型表。
第2步 创建查询“AccessObjectQ” SQL:
SELECT MSysObjects.Id,
MSysObjects.Name,
[Name] & " (" & [TypeStr] & ")" AS NameAndType,
[TypeStr] & ": " & [Name] AS TypeAndName,
Abs([Type]) AS ObjTypeID,
AccessObjectType.TypeStr,
AccessObjectType.ShowUser,
AccessObjectType.ShowAdmin
FROM MSysObjects LEFT JOIN AccessObjectType
ON MSysObjects.Type = AccessObjectType.TypeID
WHERE (((MSysObjects.Name) Not Like "msys*"
And (MSysObjects.Name) Not Like "*subform"
And (MSysObjects.Name) Not Like "*_*"
And (MSysObjects.Name) And (MSysObjects.Name) Not Like "*SF"
And (MSysObjects.Name) Not Like "*SQ"
And (MSysObjects.Name) Not Like "*~*")
AND (((AccessObjectType.ShowUser)=True) OR ((AccessObjectType.ShowAdmin)=True)))
ORDER BY MSysObjects.Name;
第3步 创建表“AccessObjectVisibility” 列:
现在,您可以轻松打开此表(或查询),并选择希望用户和管理员在您在表单上提供的自动填充列表中查看的对象。
第4步 创建查询“UserAccessObject”
Select * from AccessObjectVisibility where UserVisible = True
创建查询“UserAccessForm”
Select * from AccessObjectVisibility where UserVisible = True and TypeID = -32768
创建查询:“UserAccessReport”,“UserAccessQuery”,“UserAccessMacro”等。
第5步“ 使用查询“UserAccessReport”创建自定义报告菜单以填充列表框或组合框
答案 3 :(得分:0)
FWIW - IIF是一个拖累,交换机解决方案似乎对SQL无效(我可能做错了)。我将Fionnuala提供的值输入到名为AccessObjectXref的新表中:
rotation
然后使用以下SQL创建对象名称及其计数的列表。显然,如果你愿意,你可以包括每条记录:
ID ObjectType ObjectDesc
1 -32768 Form
2 -32766 Macro
3 -32764 Report
4 -32761 Module
5 -32758 Users
6 -32757 DB Document
7 1 Table
8 2 DB
9 3 Container
10 5 Query
11 8 Subdatasheet
答案 4 :(得分:0)
请参阅David Fenton的正确答案above,这是这些技术的Microsoft文档。似乎有两种不同的Access对象模型: