Главная страница
Случайная страница
КАТЕГОРИИ:
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Описание системных таблиц 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 - тип объекта БД. Вот значения этого поля для некоторых типов объектов:
Тип объекта БД
| Значение поля Type
| " Родные" таблицы (в том числе и системные)
|
| Глобальные " семейства" объектов (Relationships, Databases, Tables, Modules, SysRel, Scripts, Forms, Reports)
|
| Запросы (в том числе и те, которые на самом деле являются SQL-выражениями в источниках данных форм, отчетов, элементов управления и т.д.)
|
| Прилинкованные таблицы
|
| Формы
| -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: \DBases\MyBase.mdb, а для Excel-еских - C: \MyDocuments\Raspisanie.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));
| Подчиненный запрос представляет собой инструкцию SQL SELECT, вложенную в запрос на выборку или запрос на изменение. Чтобы определить новое поле, данную инструкцию можно ввести в строку Поле в бланке запроса. Чтобы указать для данного поля условие отбора, введите инструкцию в строку Условие отбора. Подчиненные запросы используются для следующего:
проверка наличия результатов подчиненного запроса (используются зарезервированные слова EXISTS или NOT EXISTS);
поиск значений в основном запросе, которые равны, превышают или меньше значений, возвращаемых подчиненным запросом (используются зарезервированные слова ANY, IN или ALL);
создания подчиненных запросов внутри подчиненных запросов (вложенные запросы)
|