MsysObjects值的含义-32758,-32757和3(Microsoft Access)

时间:2010-10-22 08:10:56

标签: ms-access ms-access-2007

我正在查询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呢?他们代表哪里?无法在网上找到它。

5 个答案:

答案 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” 列:

  • TypeID自动编号
  • TypeStr文字
  • ShowUser是/否
  • ShowAdmin是/否

填充“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” 列:

  • ObjectID as long(使用AccessObjectQ创建为查找)
  • UserVisible为是/否
  • AdminVisible as Yes / No

现在,您可以轻松打开此表(或查询),并选择希望用户和管理员在您在表单上提供的自动填充列表中查看的对象。

第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对象模型: