...

2. Группировка и описание объектов БД

2.1. Группировка объектов

Щелкните правой кнопкой по объекту БД (таблица, форма отчет и т. д.) и выберите в контекстном меню «Свойства». В появившемся окне поле «Описание» у начинающих разработчиков скорей всего пустое. Хотя этот комментарий был бы совсем не лишним. Если выбрать вид отображения объектов «Таблица», то проявится колонка «Описание», в котором отображается характеристика объекта (если заполнено «Описание» свойства объекта). При большом их количестве получилась бы краткая справка, облегчающая понимание их назначения. Кроме того, при нажатии на заголовок столбца происходит сортировка по возрастанию. И если описания составлены по определенной системе обозначения – получили бы соответствующую ГРУППИРОВКУ. Таким образом, можно создавать сложные группы объектов, используя только систему их обозначения и описания, что значительно упростит навигацию в проекте, особенно, если объектов там не один десяток.

Еще один способ группировки объектов по какому либо признаку – использование встроенных группировок Access (правой кнопкой по объекту – добавить в группу). При этом объекты помечаются как принадлежащие к выбранной группе, список которых показан в нижней части панели навигации. Этот способ, правда, используется не так часто, видимо потому, что для необходимого понимания назначения объекта достаточно задать ему правильное имя и описание в соответствии с собственной системой обозначений.

2.2. Комментарии в таблице

Начинающие разработчики часто не используют очень полезный атрибут таблицы – возможность составления описания (комментария) к каждому полю таблицы. Хотя это во многом облегчает понимание зачем, для чего и какую роль играет это поле в базе данных. Кроме того, при создании форм и вставке полей из списка этот текст автоматически вставляется в свойство поля «StatusBarText» – текст строки состояния (в нижней части окна приложения или документа и служит для отображения подсказок о командах и кнопках и сведений о выполняемых операциях).

2.3. Получение отчета – справки по БД

Итак, если использовать осмысленные имена таблиц, полей, их описания, комментарии полей таблиц, причем желательно все это делать в соответствии с определенной системой обозначений – то в результате получим довольно объемную «справку» по созданной базе данных. Как же посмотреть «живьем», или, проще говоря, распечатать ее?

Основная информация об объектах базы данных хранится в специальных служебных таблицах: Сервис – Параметры – Вкладка вид – галка: Системные объекты. В результате в окне проекта «Таблицы» увидим новые объекты с трудночитаемыми именами: MSysAccessObjects, MSysAccessXML, MSysACEs, MSysObjects, MSysQueries, MSysRelationships. В них содержится информация об «истории жизни» объектов, их основных свойствах. Чтобы пользователи ненароком не «затерли» чего не следует, их сделали скрытыми, а некоторые вообще закрыли от прямого доступа (MSysACEs).

Например, в таблице MSysRelationships можно напрямую прочитать имена объектов и их описание, а при помощи простого запроса получить нужные параметры – например: имя объекта + описание.

SELECT MSysRelationships.szObject, MSysRelationships.szReferencedObject
FROM MSysRelationships;

Наиболее важная среди них - MSysAccessObjects. Рассмотрим ее подробнее (некоторые описания опущены, так как точную документацию по этому вопросу найти сложно)

Имя поля

Тип поля

Описание

Connect

Поле МЕМО

для прилинкованных НЕ Access таблиц в этом поле содержиться значение свойства 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

значение id родительского объекта

RmtInfoLong

Поле объекта OLE

 

RmtInfoShort

Двоичный (255)

 

Type

Числовой (Integer)

тип объекта БД

Вот некоторые значения параметра Type:

Тип объекта БД

Значение поля Type

"Родные" таблицы (в том числе и системные)

1

Глобальные "семейства" объектов (Relationships, Databases, Tables, Modules, SysRel, Scripts, Forms, Reports)

3

Запросы (в том числе и те, которые на самом деле являются SQL-выражениями в источниках данных форм, отчетов, элементов управления и т.д.)

5

Прилинкованные таблицы

6

Формы

-32768

Отчеты

-32764

Макросы

-32766

Модули (в том числе модули классов)

-32761

В итоге можно получить следующие данные:

Что можем получить

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));

Стало быть, если покопаться в структуре таблиц и составить нужные запросы – получим необходимые для отчетов источники данных. Правда, некоторые данные хранятся в двоичном виде, и придется использовать специальные процедуры, для их чтения. А некоторых параметров нет в таблицах – их можно прочитать, только обратившись к свойству объекта. Но можно воспользоваться одним из способов:

1. Сервис – анализ – архивариус

В результате автоматически создается отчет по базе данных. Но он, к сожалению, не удобочитаем и содержит много не нужной в большинстве случаев информации. Поэтому, лучше воспользоваться специальной процедурой, читающей свойства объектов БД и вставляющая их в специально созданные служебные таблицы.

2. Специальная процедура чтения свойств объектов БД

Вот пример процедуры с Hiprog.com. При ее выполнении происходит следующее:

  • создает таблицу ~TBL со списком таблиц базы (кроме MSys*) с их основными свойствами
  • создает  таблицу ~FLD со списком полей таблиц базы
  • создает таблицу ~PRP со списком свойств полей таблиц базы
  • устанавливает связи между таблицами ~TBL, ~FLD, ~PRP

в результате получим целую базу свойств нашей БД, откуда без труда можно выводить всю нужную информацию в виде отчетов или сводных таблиц. Полученная «справка» станет весьма полезным приложением, значительно облегчающим понимание (и вспоминание) структуры базы, назначение объектов.

1 2 3 4 5 6 >>

Автор: sprt16@accessoft.ru