Группировка и описание объектов БД
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)=-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 >> Обсудить на форуме...
|