Значение значений MsysObjects -32758, -32757 и 3 (Microsoft Access)

я запрашиваю таблицу 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 ответов


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


Я бы, как правило, избегал возиться с системными таблицами. Во-первых, временные объекты могут появляться там и путать вещи. Чтобы получить ту же информацию, вы можете использовать:

  CurrentDB.TableDefs
  CurrentDB.QueryDefs
  CurrentProject.AllForms
  CurrentProject.AllReports
  CurrentProject.AllMacros

Это документированный способ получить информацию. В зависимости от недокументированных системных таблиц не рекомендуется.


Шаг 1 Создать таблицу " AccessObjectType" Колонки:

  • ИД типа счетчика
  • TypeStr text
  • 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 до тех пор (создать как поиск с помощью AccessObjectQ)
  • UserVisible как Да / нет
  • AdminVisible как Да / нет

теперь вы можете легко открыть эту таблицу (или запрос) и выбрать объекты, которые вы хотите, чтобы пользователи и администраторы видели в автоматически заполненных списках, которые вы предоставляете формы.

Шаг 4 Создать Запрос "UserAccessObject"

Select * from AccessObjectVisibility where UserVisible = True

Создать Запрос "UserAccessForm"

Select * from AccessObjectVisibility where UserVisible = True and TypeID = -32768

создание запросов: "UserAccessReport", "UserAccessQuery", "UserAccessMacro" и др.

Шаг 5" Создайте меню пользовательских отчетов с помощью запроса "UserAccessReport" для заполнения списка или поля со списком


FWIW-IIF-это перетаскивание, и решение коммутатора не кажется допустимым для SQL (возможно, я сделал что-то неправильно). Я ввел значения, предлагаемые Fionnuala в новую таблицу с именем AccessObjectXref:

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

затем использовал следующий SQL для создания списка имен объектов и их счетчиков. Очевидно, вы можете включить каждую запись, если хотите:

SELECT objectdesc, Count(*) AS Expr1
FROM msysobjects,  AccessObjectTypeXref where type = objecttype
group by objectdesc order by objectdesc

правильный ответ Дэвида Фентона выше, вот документация этих методов:

  • доступ к объектной модели базы данных:
    • . TableDefs и QueryDefs являются свойствами.
  • доступ к объектной модели проекта:
    • Объект CurrentProject. Свойства включают AllForms, AllReports, AllMacros и AllModules.
    • существует также Объект CurrentData со свойствами AllTables и AllQueries. Они имеют различные наборы свойств, чем TableDefs и QueryDefs.

различия интересны. Таблиц и запросов в объектной модели базы данных Access. Формы, отчеты, макросы и модули не являются, но вместе с таблицами и запросами находятся в объектной модели проекта Access.