Автор Allen Browne, июнь 2006. Последнее обновление: 8 мая 2010 г.
Оригинал http://allenbrowne.com/AppIssueChecker.html
Перевод Александр Артамонов, ноябрь 2011 г.
Утилита проверки проблем базы данных
Эта бесплатная утилита (160 Кб в сжатом виде) создает отчет по потенциальным проблемам со структурой Аксессовских баз данных. Она не вносит никакие изменения в базу данных, которую вы исследуете.
Утилита рассчитана на разработчиков для проверки своих приложений во время разработки, и консультантов, исследующих чужие базы данных.
Некоторые из проблем, выявляемых утилитой, могут не иметь значения - или могут быть даже намеренно включены в ваше приложении. Например, необязательные внешние ключи могуть быть очень полезным приемом дизайна, и пробелы в имени поля не вызовут проблем кроме замедления разработки. Утилита просто сообщает о фактах, а вы решаете, что имеет значение, а что - нет. Поэтому вы можете настроить ее, чтобы пропускать определенные слова или символы и игнорировать какие-то проблемы.
Что она делает
Идентифицируемые проблемы:
- Зарезервированные слова и другие проблемные слова, использованные в качестве имен таблиц, полей и запросов. (Смотри список из of 2500+ слов.)
- Проблемные символы в именах таблиц, полей и запросов.
- Талицы, которые не могут быть открыты (напр. присоединенные таблицы с плохими линками.)
- Таблицы без первичного ключа.
- Связи без включенной ссылочной целостности.
- Необязательные значения полей, составляющих внешние ключи (разрешение висячих записей.)
- Установленная опция автокоррекции имен (порча базы данных.)
- Datasheet Schema option set (пользователи могут изменять структуру в режиме табличной формы - Access 2007 и более поздние версии.)
- Таблицы с установленным Именем подтаблицы (проблемы с производительностью.)
- Поля с установленным свойством Разрешить пустые строки (проблемы с производительностью и целостностью.)
- Поля с типом Действительный/Decimal (баги Аксесса.)
- Поля со сложными данными (применимо к accdb и accdt файлам, не mdb.)
- Слишком широкая запись (слишком много символов в таблице/запросе, если все поля будут заполнены.)
- Разрешен режим макета (Макеты формы и отчетов разрешают изменения с данными - Аксесс 2007 и более поздний.)
- Вычисляемые поля в таблице для Аксесса 2010.
- Чтобы прочитать таблицу, требуется более поздняя версия Аксесса (Аксесс 2010, нельзя снять выделение.)
Ограничения:
- Требует Аксесс 2000 или более поздние версии.
- Не работает с защищенными паролем или зашифрованными базами.
- Рзработан для JET-овских таблиц (на таблиц, прилинкованных из не-Аксессовских источников данных.)
- Не проверяет имена полей запросов и параметров.
- Не предлагает, где нужно организовать связь (проверяет только существующие.)
- Предоставлено на условиях "as is", без гарантий и поддержки.
Использование утилиты
Чтобы использовать:
- Скачать и разархивировать DbIssueChecker.mdb.
- Открыть через Microsoft Access. Откроется главная форма.
- Нажмите на кнопку Folder, чтобы выбрать файл, который вы хотите проанализировать.
- Проставьте флажки у проблем, на которые вы проверяете.
- Нажмите кнопку Examine, и прочитайте отчет.
Настройка утилиты
Настройте утилиту, чтобы пропускать определенные проверки, избегать проверок на определенные слова и символы и добавить ваши собственные слова/символы:
- Для каждой проблемы из списка выше вы можете отменить проверку, снимая соответствующий флажок.
- Список зарезервированных слов хранится в таблице tblBadWord. Вы можете добавить другие проблемные слова к этой таблице либо настроить утилиту так, чтобы пропускать проверку отдельных слов, отмечая флажком поле Skip в таблице.
- Список проблемных символов хранится в таблице tblBadChar. Вы можете добавлять другие символы в эту таблицу или настроить утилиту так, чтобы пропускать проверку на определенные символы (например, пробелы в именах), отмечая чекбокс Skip в таблице.
Скриншот
Основной экран утилиты:
За кулисами
Если вы хотите проследить логику работы утилиты:
-
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)