Значение значений 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.