Выпуск 90. Материалы для начинающих (37 урок)

Подписка: "Access 2000 - программирование и готовые решения"
Дата:14.04.2008
Автор: Парусников Алексей (aka Palarm)
Сайт: http://www.accessoft.ru под редакцией с http://www.leadersoft.ru/
Новые материалы: Вопросы при проектировании БД
На сайте AccesSoft публикуются статьи, посвященые вопросам, связанным с разработкой приложений Access. Вопросы по работе с Access Вы можете задать на форуме. Вы так же можете ознакомиться с готовыми программами, получить исходный код, купить программу, связаться с автором для решения вопроса о доработке программы под Ваши требования.


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

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

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

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

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

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

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

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

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

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

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

SELECT MSysRelationships.szObject, MSysRelationships.szReferencedObject
FROM MSysRelationships;

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

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

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

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

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

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

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

Выпуск 90. Для специалистов. Экспорт модулей и классов

Информация от www.leadersoft.ru .

    Наверное, все уже знают, что при проектировании сетевых баз данных на Access их разбивают на 2 части. В одной базе находится интерфейс, а в другой – таблицы. Для хранения таблиц используется mdb файл или mdf - SQL Server. Но бывает еще и полезным интерфейс разбить на 2 части. В одной можно сохранить типовой интерфейс (учет клиентов, финансов и т.п.), а в другой служебный (вход по паролю, учет пользователей, общие функции по интерфейсу и т.п.). Часто файлы для хранения интерфейса выбирают mdb, mde, adp, ade.  Можно пойти и дальше, если попытаться конвертировать служебный интерфейс классы и функции в DLL библиотеку. Для этого надо иметь Visual Basic 6.0. Он позволяет создавать библиотеки, которые можно использовать в Access. Ниже дан пример экспорта всех классов и модулей в папку текущей программы ..\App_Code\ (ее надо создать). Далее загружаете эти данные в проект Visual Basic. Для классов надо установить общее использование, а так все должно работать.

Public Function funExportModules() As Boolean
Dim sFullPath As String

On Error GoTo 999
With Application.VBE.ActiveVBProject
For Each obj In .VBComponents
sFullPath = ""
If obj.Type = vbext_ct_StdModule Then
sFullPath = Application.CurrentProject.Path & "\app_Code\" & obj.Name & ".bas"
ElseIf obj.Type = vbext_ct_ClassModule Then
sFullPath = Application.CurrentProject.Path & "\app_Code\" & obj.Name & ".cls"
End If
If sFullPath <> "" Then
obj.Export sFullPath
End If
Next
End With
Exit Function 'Выходим из программы

999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
End Function
 

Ссылки на программы
http://shops.leadersoft.ru/Catalog.aspx?MarketID=1  - все базам данных Access, SQL Server
http://shops.leadersoft.ru/Catalog.aspx?MarketID=18 - все коммерческие программы