Microsoft Access: Приложения и утилиты

Автор Allen Browne, июнь 2006. Последнее обновление: 8 мая 2010 г.

Оригинал http://allenbrowne.com/AppIssueChecker.html

Перевод Александр Артамонов, ноябрь 2011 г.


Утилита проверки проблем базы данных

Эта бесплатная утилита (160 Кб в сжатом виде) создает отчет по потенциальным проблемам со структурой Аксессовских баз данных. Она не вносит никакие изменения в базу данных, которую вы исследуете.

Утилита рассчитана на разработчиков для проверки своих приложений во время разработки, и консультантов, исследующих чужие базы данных.

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

Что она делает

Идентифицируемые проблемы:

  1. Зарезервированные слова и другие проблемные слова, использованные в качестве имен таблиц, полей и запросов. (Смотри список из of 2500+ слов.)
  2. Проблемные символы в именах таблиц, полей и запросов.
  3. Талицы, которые не могут быть открыты (напр. присоединенные таблицы с плохими линками.)
  4. Таблицы без первичного ключа.
  5. Связи без включенной ссылочной целостности.
  6. Необязательные значения полей, составляющих внешние ключи (разрешение висячих записей.)
  7. Установленная опция автокоррекции имен (порча базы данных.)
  8. Datasheet Schema option set (пользователи могут изменять структуру в режиме табличной формы - Access 2007 и более поздние версии.)
  9. Таблицы с установленным Именем подтаблицы (проблемы с производительностью.)
  10. Поля с установленным свойством Разрешить пустые строки (проблемы с производительностью и целостностью.)
  11. Поля с типом Действительный/Decimal (баги Аксесса.)
  12. Поля со сложными данными (применимо к accdb и accdt файлам, не mdb.)
  13. Слишком широкая запись (слишком много символов в таблице/запросе, если все поля будут заполнены.)
  14. Разрешен режим макета (Макеты формы и отчетов разрешают изменения с данными - Аксесс 2007 и более поздний.)
  15. Вычисляемые поля в таблице для Аксесса 2010.  
  16. Чтобы прочитать таблицу, требуется более поздняя версия Аксесса (Аксесс 2010, нельзя снять выделение.)

Ограничения:

  • Требует Аксесс 2000 или более поздние версии.
  • Не работает с защищенными паролем или зашифрованными базами.
  • Рзработан для JET-овских таблиц (на таблиц, прилинкованных из не-Аксессовских источников данных.)
  • Не проверяет имена полей запросов и параметров.
  • Не предлагает, где нужно организовать связь (проверяет только существующие.)
  • Предоставлено на условиях "as is", без гарантий и поддержки.

Использование утилиты

Чтобы использовать:

  1. Скачать и разархивировать DbIssueChecker.mdb.
  2. Открыть через Microsoft Access. Откроется главная форма.
  3. Нажмите на кнопку Folder, чтобы выбрать файл, который вы хотите проанализировать.
  4. Проставьте флажки у проблем, на которые вы проверяете.
  5. Нажмите кнопку Examine, и прочитайте отчет.

Настройка утилиты

Настройте утилиту, чтобы пропускать определенные проверки, избегать проверок на определенные слова и символы и добавить ваши собственные слова/символы:

  • Для каждой проблемы из списка выше вы можете отменить проверку, снимая соответствующий флажок.
  • Список зарезервированных слов хранится в таблице tblBadWord. Вы можете добавить другие проблемные слова к этой таблице либо настроить утилиту так, чтобы пропускать проверку отдельных слов, отмечая флажком поле Skip в таблице.
  • Список проблемных символов хранится в таблице tblBadChar. Вы можете добавлять другие символы в эту таблицу или настроить утилиту так, чтобы пропускать проверку на определенные символы (например, пробелы в именах), отмечая чекбокс Skip в таблице.

Скриншот

Основной экран утилиты:

Screenshot 

За кулисами

Если вы хотите проследить логику работы утилиты:

  • frmMain - основной интерфейс, с подформой frmIssue, где пользователь может выбрать, по каким пунктам осуществлять проверку.

  • tblIssue lists the issues the utility can examine, with a description and help for each one. Do not change the IssueID values: this primary key is a bitfield, so the numbers can be summed and the code can read each bit to determine the issues to check for.

  • tblIssue перечисляет пункты, по которым утилита может осуществлять проверку, с описанием и подсказкой по каждой проблеме. Не меняйте значение IssueID: этот первичный ключ является битовым полем, так чтобы числа могли быть суммированы, и код мог прочесть каждый бит, чтобы определить, по каким пунктам делать проверку.

  • tblLogDb ведет лог для каждой базы данных, которую вы анализируете, включая битовое значение того, что было проверено и сколько пунктов было обнаружено.

  • tblObject перечисляет каждый объект в последней базе данных, которую вы проверяли. Таблица содержит самообъединение, чтобы можно было идентифицировать, какой объект какому объекту принадлежит (т.е. к какой таблице какое поле относится.) Типы объектов определны в справочной таблице ltObjectType.

  • tblObjectIssue is a junction table between tblObject and tblIssue, listing the issues identified for each object.

  • tblObjectIssue ассоциативная таблица между таблицами tblObject и tblIssue, перечисляющая пункты, выявленные для каждого объекта.

  • qryObjectList это запрос UNION, который получает имена объектов из двух экземпляров таблицы tblObject, собирая их таким образом, что каждый объект ассоциируется с соответстующим родителем (если такой есть). qryResult получает результат, берет данные из других таблиц и передает их в отчет rptResult.

  • Код в модуле ajbIssue очищает таблицы результатов, выполняет проверки и записывает результаты. ExamineDatabase() - основная процедура, а конкретные проверки и запись осуществляется отдельными процедурами. Код составлен так, чтобы он мог выполняться независимо от интерфейса.

  • Чтобы использовать утилиту с таблицами SQL Server, измените каждый экземпляр
        OpenRecordset(strSql)
    на:
        OpenRecordset(strSql, dbOpenDynaset, dbSeeChanges)

Конструктор сайтов - uCoz