Суббота, 04.05.2024, 20:54

Разработка баз данных Microsoft Access

Меню сайта
Категории раздела
Часто встречающиеся вопросы при проектировании БД [4] Изменение уровня защиты от макровирусов [1]
Особенности проектирования приложений в Access [1] Оптимизация приложений в Access [1]
Почему начинающие задают так много вопросов [1] Основные этапы разработки БД [1]
Техническое задание [2] Основные разделы ТЗ [1]
Наш опрос
Оцените мой сайт
Всего ответов: 7
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Вход на сайт
Поиск
Друзья сайта

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

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

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

Обсудить на форуме...

Категория: Часто встречающиеся вопросы при проектировании БД | Добавил: admin (03.11.2010)
Просмотров: 3513 | Теги: объекты БД