Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.10.2020

Просмотров: 7912

Скачиваний: 25

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

3. В диалоговом окне Файл новой базы данных

 New Database) в раскрывающемся

списке Тип файла (Save As Type) выберите элемент Все файлы

 Если оставить

тип Базы данных Microsoft Access (Microsoft Access Database) (*.mdb), при сохране-
нии файла

 данных с расширением

 Access автоматически добавит еще и

 Таким образом,

 получите

4. В поле Имя файла (File Name) введите строку

 и щелкните на кнопке

Создать (Create).

Воспринимайте созданную базу

 как обычную базу данных

Access.

Из материала предыдущих глав вы уже знаете, что объект класса Err содержит пе-

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

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

динамического создания журнальной таблицы — в этом случае вам будет легко по-

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

держкой протокола ошибок. Текст процедуры создания журнальной таблицы приве-
ден в листинге

Листинг

 Процедура создания журнальной таблицы

1: CREATE TABLE LOG
2: (ID

 PRIMARY KEY,

3: ERROR_ID NUMBER,

 SOURCE

5: DESCRIPTION TEXT
6: HELPFILE TEXT(255),
7 : HELPCONTEXT NUMBER,

 WHEN DATETIME,
 USER TEXT (25)

10:

Листинг

 содержит текст команды CREATE TABLE на языке SQL, ко-

1 торая позволяет создать таблицу с именем LOG в произвольной базе дан-

ных. Сохраните

 в виде запроса под именем

 Те-

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

Динамическое создание журнальной таблицы

В каждой базе данных, которая будет взаимодействовать с создаваемой надстрой-

кой, должна содержаться копия таблицы LOG. Чтобы избежать возникновения ошибки
при попытке повторного создания таблицы, следует написать код, проверяющий факт
наличия таблицы в базе данных. Если таблицы нет, ее необходимо построить. Лис-
тинг 23.2 демонстрирует текст

 динамического создания таблицы LOG.

23-й час. Надстройки Access

415


background image

Листинг 23.2. Процедура динамического создания таблицы LOG

1:
2 :
3:
4:
5:
б :
7 :
8:
9 :

10
11
12
13
14

Option Compare Database

Option Explicit

Private Function

 () As String

 =

"CREATE TABLE LOG

 &

 PRIMARY KEY, ERROR_ID

 &

 SOURCE

 DESCRIPTION

 &

 HELPCONTEXT NUMBER,

 &

"WHEN DATETIME, USER

 Function

 Sub

 QueryText As String)

: Call

 Sub

I Листинг 23.2 содержит только часть будущего решения, поэтому мы соз-
I дадим в базе данных

 новый модуль и сохраним

 под именем

LogUtilities. Код SQL, представленный ранее в листинге 23.1, теперь

перенесен в строки

 листинга 23.2. Процедура CreateTable, текст

которой размещен в строках

 предназначена для создания таблицы

LOG в текущей базе данных и использует с этой целью метод RunSQL
класса DoCmd из состава библиотеки

При реализации общего решения (в этом вы убедитесь позднее) мы исходим из

того, что таблица LOG в базе данных существует. Если ее нет, генерируется исключи-
тельная ситуация. Процедура обработки

 создает таблицу и возвращает управ-

ление

 вызвавшей исключение, для повторного выполнения. В

 раз-

деле приведен фрагмент кода, в котором обеспечивается вызов процедуры Cre-

ateTable и реализуется механизм добавления в таблицу LOG записи, содержащей ин-

формацию об ошибке.

Ведение протокола ошибок

Мы будем полагать, что таблица LOG в базе данных уже создана. Код, приведен-

ный ниже, выполняет операцию добавления в журнальную таблицу записи с данными
об ошибке (листинг 23.3). Мы определили три процедуры: две из них снабжены

лификаторами Public

 и

 а третья -• Private

Листинг 23.3. Процедуры добавления записей в таблицу LOG

Public Sub

 ByVal Error As ErrObject,

Optional

 As String = "Admin" )

With Err

Call

.HelpFile,

 UserName)

End With

End Sub

 Function

 As

String) As Boolean

416

Часть VIII.

 программирование в Access


background image

11:

 Dim Table As Variant

14: For Each Table In CurrentData.AllTables

 TableExists =

 = TableName

16: If (TableExists) Then Exit For

 Next Table

18:

 Function

20:

 Sub

 Number As Long,

 As String,

22: ByVal Description As String,

 HelpFile As

 ByVal HelpContext As Long, Optional

 As String )

24:
25: On Error GoTo EXCEPT
26: Call

 Source, Description,

27: HelpFile, HelpContext, UserName)
28:
29: Exit Sub

31: If

 Then

 Call
 Resume

34: Else
35: Call
36:
37: End If

 Sub

39:
40

 Sub DoWriteEntry (ByVal Number As Long,

41: ByVal Source As String, ByVal Description As String,

 ByVal HelpFile As String, ByVal HelpContext As Long,
 Optional UserName As String)

44:
45: Dim SQL As String
46: SQL = "SELECT * FROM LOG"

 Dim Recordset As New

48:Call

adOpenDynamic,

50:

 ) = Number

51:

 "SOURCE" ) = Source

52 : Recordset ( "DESCRIPTION". ) = Description

 "HELPFILE" ) = HelpFile

54:

 "HELPCONTEXT" ) = HelpContext

55:

 "WHEN" ) = Now

56:

 "USER" ) = UserName

58:
59: Set Recordset = Nothing
60:

 End Sub

I Код листинга 23.3, рассматриваемый совместно с текстом листинга 23.2,
I составляет содержимое модуля LogUtilities. Процедуре WriteError-

Entry, расположенной в строках

 в качестве параметра передается

23-й час. Надстройки Access 417


background image

объект Err, а она, в свою очередь, обращается к процедуре
Операция добавления записи выполняется приватной процедурой DoW-

riteEntry, вызываемой в строке 14. Оставшаяся часть кода процедуры

WriteEntry связана с обработкой возможных ошибок. Если ошибка
произошла по причине отсутствия в базе данных таблицы LOG, вызывает-
ся процедура CreateTable, рассмотренная в листинге 23.2, и управление
вновь передается строке, породившей ошибку (строки 32-33). Если при-
чина ошибки заключается в другом, вызывается стандартный метод

 объекта Err. В строках

 выполняется поиск таблицы LOG в

коллекции AllTables.

Самая важная часть работы возложена на процедуру

 — об этом го-

ворит префикс Do ее названия. Строки обработки ошибок отделены от кода, выпол-
няющего собственно операцию пополнения таблицы, с целью упростить обе процеду-
ры. Код подпрограммы DoWriteEntry достаточно прозрачен и не нуждается в под-
робных

 создается объект класса

 с его помощью в

таблицу добавляется новая запись, ее полям присваиваются значения, переданные

процедуре в виде аргументов, а затем внесенные изменения сохраняются в базе дан-
ных командой Update.

Чтобы протестировать рассмотренный выше код, создайте новый модуль и помес-

тите в него процедуру, приведенную в листинге 23.4, или ей подобную. (Я обычно

стараюсь сохранять тестовый код в отдельных модулях, не смешивая его с кодом, не-
посредственно решающим задачу, — то же рекомендую делать и вам.)

Листинг 23.4. Тестовая процедура для проверки кода модуля LogUtilities

 Sub Test ( )

 On Error GoTo Except

3: Call

 "LogUtilities", "Test", "No Help", 0)

Exit Sub

Call

7 : End Sub

I Тестовый код действует следующим образом: в строке 3 с помощью при-
I нудительного вызова

 имитируется возникновение ошибки и

провоцируется выполнение кода обработчика исключений, который, об-
ращаясь к процедуре WriteErrorEntry, сохраняет информацию об
ошибке в таблице LOG базы данных. Теперь, снабдив любую из реальных
программ конструкциями обработки ошибок, содержащими обращения к
процедурам WriteErrorEntry или WriteEntry, вы получите надежный
код и удобное средство анализа ошибок. В случае возникновения любого

сбоя вы без труда восстановите картину происшедшего, просмотрев со-

держимое соответствующей записи таблицы LOG. В следующем разделе

мы обсудим способы оперативного включения/отключения функций ве-

дения протокола ошибок и просмотра содержимого журнальной таблицы.

Интерфейс просмотра ошибок

Диспетчер настроек, вызываемый из меню

 ис-

пользуют для добавления внешних ссылок на базы данных, которые необходимо инкор-

порировать в текущий проект. Добавив с помощью диспетчера надстроек (вы ознакоми-

418

Часть VIII. Объектно-ориентированное программирование в Access


background image

тесь с ним чуть позже) код

 в базу данных, вы получите доступ к средствам, ко-

торые предлагает эта надстройка. Включение механизма ведения протокола обеспечива-
ется вызовом любой из процедур,

 либо

 Ниже приведен

код, дающий возможность просмотра содержимого журнала ошибок.

После установки надстройки в среде Access в меню

 Надстройки добавляет-

ся новый элемент. Щелчок на нем приводит к срабатыванию определенной процеду-
ры или функции в модуле надстройки — в данном случае в этой роли выступает
функция, открывающая таблицу LOG для просмотра. (Вы можете развить мою мысль и
придумать что-то еще.) Код функции просмотра содержимого журнальной таблицы

приведен в листинге

Листинг 23.5. Функция просмотра содержимого таблицы LOG, выполняемая при выборе

соответствующего элемента меню

1: Function EntryPoint ( )

 Call

3 : End Function

 acReadOnly)

Как видите, код листинга 23.5 нельзя назвать особенно сложным. В

строке 2 используется обращение к методу

 для откры-

тия указанной таблицы в режиме просмотра. Если ошибок в тестируемой
программе не было, значит, таблица LOG в базе данных еще не создана и
при выполнении строки 2 откроется окно с сообщением об

 ошибке — это вполне нормально. Функцию Entry-

Point также следует включить в состав модуля

Тестирование кода надстройки

Подобно любому программному коду, процедуры и функции из состава надстрой-

ки должны быть подвергнуты всестороннему тестированию. Поскольку мы имеем в
виду надстройку в виде базы данных Access, никаких принципиальных инноваций вы
не встретите. Как и ранее, откройте модуль в окне редактора VBA, поместите тексто-
вый курсор в пределах процедуры, которую хотите выполнить, и нажмите клавишу

<F5> или <F8>. Гораздо легче протестировать процедуры надстройки заблаговремен-
но, перед инсталляцией ее в среде Access.

Еще один способ тестирования внешнего кода связан с построением ссылки из

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

 (или произвольную базу), выполните следующие действия.

1. Откройте новую или существующую базу данных, в которой необходимо создать

ссылку.

2. Выберите в строке меню окна Access команду

 Visual

Basic

 Editor).

3. В строке меню окна редактора Microsoft Visual Basic выберите команду

4. В диалоговом окне References щелкните на кнопке Browse.

5. Откроется диалоговое окно Add Reference. В раскрывающемся списке Тип файлов

(Files of Туре) выберите опцию Надстройки

6. С помощью средств навигации окна отыщите файл

 и щелкните на кнопке

Открыть (Open), а затем на кнопке

 в диалоговом окне References.

 час. Надстройки Access

419