ГлавнаяMS ACCESS Описание системной таблицы MS Access - MSysObjects
Описание системной таблицы MS Access - MSysObjects
Автор NSA
18.11.2001 г.
Поскольку, к сожалению, я нигде не смог найти описаний этих таблиц приведенная ниже информация была получена мной исключительно в процессе экспериментов над ними... (C сайта NSA)
Описание системных таблиц MS Access
В этой статье хочу рассказать о системных таблицах MS Access - для чего они нужны, что в них содержиться и какую (порой весьма интересную) информацию можно из них извлечь. Поскольку, к сожалению, я нигде не смог найти описаний этих таблиц приведенная ниже информация была получена мной исключительно в процессе экспериментов над ними. Так что не исключено, что есть какие-то неточности или ошибочные выводы. Ну и, естественно, ни в коем разе не претендую на полноту изложенной информации.
MS Access имеет семь ситемных таблиц: MSysACEs, MSysCmdbars, MSysModules, MSysModules2, MSysObjects, MSysQueries и MSysRelationships.
Таблица MSysObjects.
На мой взгляд - самая "важная" таблица. Содержит информацию об объектах базы данных.
Эта таблица имеет следующие поля:
Имя поля
Тип поля
Connect
Поле МЕМО
Database
Поле МЕМО
DateCreate
Дата/время
DateUpdate
Дата/время
Flags
Числовой
ForeignName
Текстовый (255)
Id
Числовой (Long Int)
Lv
Поле объекта OLE
LvExtra
Поле объекта OLE
LvModule
Поле объекта OLE
LvProp
Поле объекта OLE
Name
Текстовый (255)
Owner
Двоичный (255)
ParentId
Числовой (Long Int) Prim.key
RmtInfoLong
Поле объекта OLE
RmtInfoShort
Двоичный (255)
Type
Числовой (Integer)
Id - ключевое поле. Содержит уникальный идентификатор для каждого объекта БД.
ParentId - значение Id "родительского" объекта. Например если объект "Forms" имеет Id = -2147483648, то все формы будут иметь "-2147483648" в поле ParentId. Стоит заметить, что у всех запросов и таблиц БД один и тот же "родитель" - "Tables".
Type - тип объекта БД. Вот значения этого поля для некоторых типов объектов:
Запросы (в том числе и те, которые на самом деле являются SQL-выражениями в источниках данных форм, отчетов, элементов управления и т.д.)
5
Прилинкованные таблицы
6
Формы
-32768
Отчеты
-32764
Макросы
-32766
Модули (в том числе модули классов)
-32761
Name - имя объекта. Для запросов, которые на самом деле являются SQL-выражениями источников записей это имя стоится по определенным правилам:
Источник записей формы (префикс ~sql_f): ~sql_fИмяФромы Для источника записей формы с именем Form1 это имя будет ~sql_fForm1
Источник записей отчета (префикс ~sql_r): ~sql_rИмяОтчета Для источника записей отчета с именем Report1 это имя будет ~sql_rReport1
Источник строк элемента управления (например списка) формы (префикс ~sql_c): ~sql_cИмяФормы~sql_cИмяЭлементаУправления Для элемента управления с именем MyListBox1 в форме с именем Form1 это имя будет ~sql_cForm1~sql_cMyListBox1
Источник строк элемента управления (например списка) отчета (префикс ~sql_d): ~sql_dИмяОтчета~sql_dИмяЭлементаУправления Для элемента управления с именем MyListBox1 в отчета с именем Report1 это имя будет ~sql_dReport1~sql_dMyListBox1
ForeignName - для прилинкованных таблиц в этом поле содержиться "реальное" имя таблицы. Например если талица с имем Table1 прилинкована с именем MyTable1, то в поле Name будет MyTable1, а в поле ForeignName - Table1. А для прилинкованного документа Excel в этом поле будет имя листа - например Лист1$.
Database - для прилинкованных таблиц в этом поле содержиться полный путь и имя файла, откуда была прилинкована таблица. Для прилинкованных Access-ных таблиц это будет, например, D:DBasesMyBase.mdb, а для Excel-еских - C:MyDocumentsRaspisanie.xls.
Connect - для прилинкованныз НЕ-Access-ных таблиц в этом поле содержиться значение свойства Connect. Например для Excel это будет Excel 5.0;HDR=NO;IMEX=2;
DateCreate - дата и время создания объекта.
DateUpdate - дата и время обновления объекта.
Для чего нужны остальные поля этой таблицы - не знаю.
А теперь посмотрим, какие данные мы можем получить из этой таблицы:
Что можем получить
SQL
Список "родных" таблиц
SELECT MSysObjects.Id, MSysObjects.Name FROM MSysObjects WHERE (((MSysObjects.Type)=1) AND ((Left([Name],4))<>"MSys" And (Left([Name],4))<>"USys"));
Список присоединенных таблиц
SELECT MSysObjects.Id, MSysObjects.Name FROM MSysObjects WHERE (((MSysObjects.Type)=6) AND ((Left([Name],4))<>"MSys" And (Left([Name],4))<>"USys"));
Список "родных" и присоединенных таблиц
SELECT MSysObjects.Id, MSysObjects.Name, MSysObjects.Type FROM MSysObjects WHERE (((MSysObjects.Type)=1 Or (MSysObjects.Type)=6) AND ((Left([Name],4))<>"MSys" And (Left([Name],4))<>"USys"));
Список запросов
SELECT MSysObjects.Id, MSysObjects.Name FROM MSysObjects WHERE (((Left([Name],4))<>"~sq_") AND ((MSysObjects.Type)=5));
Список форм
SELECT MSysObjects.Id, MSysObjects.Name FROM MSysObjects WHERE (((MSysObjects.Type)=-32768));
Список отчетов
SELECT MSysObjects.Id, MSysObjects.Name FROM MSysObjects WHERE (((MSysObjects.Type)=-32764));
Список макросов
SELECT MSysObjects.Id, MSysObjects.Name FROM MSysObjects WHERE (((MSysObjects.Type)=-32766));
Список модулей
SELECT MSysObjects.Id, MSysObjects.Name FROM MSysObjects WHERE (((MSysObjects.Type)=-32761));
Список форм, имеюших выражение SQL в источнике
SELECT MSysObjects_1.Id AS [Id Форм], Right([MSysObjects]![Name],Len([MSysObjects]![Name])-5) AS [Имя формы], MSysObjects.Id AS [Id Запроса] FROM MSysObjects, MSysObjects AS MSysObjects_1 WHERE (((Right([MSysObjects]![Name],Len([MSysObjects]![Name])-5))= [MSysObjects_1]![Name]) AND ((Left([MSysObjects]![Name],5))="~sq_f") AND ((MSysObjects.Type)=5) AND ((MSysObjects_1.Type)=-32768));
Список отчетов, имеюших выражение SQL в источнике
SELECT MSysObjects_1.Id AS [Id Отчета], Right([MSysObjects]![Name],Len([MSysObjects]![Name])-5) AS [Имя отчета], MSysObjects.Id AS [Id Запроса] FROM MSysObjects, MSysObjects AS MSysObjects_1 WHERE (((Right([MSysObjects]![Name], Len([MSysObjects]![Name])-5))=[MSysObjects_1]![Name]) AND ((Left([MSysObjects]![Name],5))="~sq_r") AND ((MSysObjects.Type)=5) AND ((MSysObjects_1.Type)=-32764));
Список элементов управления форм, имеюших выражение SQL в источнике
SELECT MSysObjects_1.Id, Mid([MSysObjects]![Name],6,InStr(2,[MSysObjects]![Name],"~sq_c")-6) AS [Имя формы], Mid([MSysObjects]![Name],InStr(2,[MSysObjects]![Name],"~sq_c")+5) AS [Имя элемента] FROM MSysObjects AS MSysObjects_1, MSysObjects WHERE (((Mid([MSysObjects]![Name],6,InStr(2,[MSysObjects]![Name], "~sq_c")-6))=[MSysObjects_1]![Name]) AND ((Left([MSysObjects]![Name],5))="~sq_c") AND ((MSysObjects.Type)=5) AND ((MSysObjects_1.Type)=-32768));
Список элементов управления отчетов, имеюших выражение SQL в источнике
SELECT MSysObjects_1.Id, Mid([MSysObjects]![Name],6,InStr(2,[MSysObjects]![Name],"~sq_d")-6) AS [Имя отчета], Mid([MSysObjects]![Name],InStr(2,[MSysObjects]![Name],"~sq_d")+5) AS [Имя элемента] FROM MSysObjects, MSysObjects AS MSysObjects_1 WHERE (((Mid([MSysObjects]![Name],6,InStr(2,[MSysObjects]![Name], "~sq_d")-6))=[MSysObjects_1]![Name]) AND ((Left([MSysObjects]![Name],5))="~sq_d") AND ((MSysObjects.Type)=5) AND ((MSysObjects_1.Type)=-32764));