|
Программирование >> Проектирование интерфейса пользователя
В диалоговом окне Файл новой базы данные ile New Database) в раскрывающемся списке Тип файла (Save As Type) выберите элемент Все файлы (*.*). Если оставить тип Базы данных Microsoft Access (Microsoft Access Database) (*.mdb), при сохранении файла базы данных с расширением .mda, Access автоматически добавит еше и .mdb. Таким образом, вы получите Имя фaйлa.mda.mdb. В поле Имя файла (File Name) введите строку mda и щелкните на кнопке Создать (Create). Воспринимайте созданную базу как обычную базу данных Access. Из материала предыдущих глав вы уже знаете, что объект класса Err содержит переменные для хранения номера ошибки, названия источника ее происхождения, описания, имени соответствующего файла оперативной справки и идентификатора темы в файле справки. Вся эта информация должна найти отражение в таблице, которую нам предстоит построить. Помимо указанных данных, таблица будет содержать сведения о пользователе приложения и дате/времени возникновения ошибки. Обладая таким набором сведений, вы сможете без особого труда восстановить ход всех событий, которые привели к ошибке, даже в том случае, если программа потерпела полный крах. Предвидя дальнейший ход событий, отметим необходимость в SQL-процедуре динамического создания журнальной таблицы - в этом случае вам будет легко построить ее в любой базе данных, приложения которой нуждаются в отладке с поддержкой протокола ошибок. Текст процедуры создания журнальной таблицы приведен в листинге 23.1. Листинг .1. Процедура создания журнальной таблицы 5 CREATE TABLE LOG (ID AUTOINCREMENT PRIMARY KEY, ERROR ID NUMBER, SOURCE TEXT (50) , DESCRIPTION TEXT (255) , HELPFILE TEXT(255), HELPCONTEXT NUMBER, WHEN DATETIME, USER TEXT (25) I Листинг .1 содержит текст команды CREATE TABLE на языке SQL, ко-Ч торая позволяет создать таблицу с именем LOG в произвольной базе данных. Сохраните его в виде запроса под именем CREATE LOG TABLE. Теперь вы всегда сможете, обратившись к запросу, быстро создать в текущей базе таблицу LOG, исключив необходимость выполнения ручных операций. - Динамическое создание журнальной таблицы В каждой базе данных, которая будет взаимодействовать с создаваемой надстройкой, должна содержаться копия таблицы LOG. Чтобы избежать возникновения ошибки при попытке повторного создания таблицы, следует написать код, проверяющий факт наличия таблицы в базе данных. Если таблицы нет, ее необходимо построить. Листинг 23.2 демонстрирует текст VBA-процедуры динамического создания таблицы LOG. Листинг 23.2. Процедура динамического создания таблицы LOG 1: Option Compare Database 2: Option Explicit 4: Private Function CreateLogQuery () As String 5: CreateLogQuery = 6: CREATE TABLE LOG & 7: (ID AUTOINCREMENT PRIMARY KEY, ERRORJD NUMBER, & 8: SOURCE TEXT (50) , DESCRIPTION TEXT (255) , & 9: HELPFILE TEXT (255) , HELPCONTEXT NUMBER, & WHEN DATETIME, USER TEXT(25)); 10 :End Function 11: 12 : Private Sub CreateTable (ByVal QueryFext As String) 13: Call DoCmd.RunSQL(QueryText) 14: End Sub Il Листинг 23.2 содержит только часть будущего решения, поэтому мы соз-ll дадим в базе данные .mda новый модуль и сохранив его под именем EogUtilities. Код SQL, представленный ранее в листинге 23.1, теперь перенесен в строки 4-10 листинга 23.2. Пропедура CreateFable, текст которой размещен в строках предназначена для создания таблицы LOG в текущей базе данных и использует с этой целью метод RunSQL класса DoCmd из состава библиотеки DAO. При реализации общего решения (в этом вы убедитесь позднее) мы исходим из того, что таблица LOG в базе данных существует. Если ее нет, генерируется исключительная ситуация. Процедура обработки создает таблицу и возвращает управление строке, вызвавшей исключение, для повторного выполнения. В следующем разделе приведен фрагмент кода, в котором обеспечивается вызов процедуры Cre-ateTable и реализуется механизм добавления в таблицу LOG записи, содержащей информацию об ошибке. Ведение протокола ошибок Мы будем полагать, что таблица LOG в базе данных уже создана. Код, приведенный ниже, выполняет операцию добавления в журнальную таблицу записи с данными об ошибке (листинг 23.3). Мы определили три пропедуры: две из них снабжены ква-лификаторами Public (WriteErrorEntry и WriteEntry), а третья - Private (DoWriteEntry). Листинг 23.3. Процедуры добавления записей в таблицу LOG 4 5 6 7 Public Sub WriteErrorEntry( ByVal Error As ErrObject, Optional UserName As String = Admin ) With Err Call .HelpEile, .HelpContext,UserName) End With End Sub : Private Function s (TableName As String) As Boolean 24 : 25: 26: 34: 35: 36: 37: 38 39 : 44 : 46: 47 On Frror GoTo FXCFPT Call DoWriteEntry(Number, Source, Description, HelpFile, HelpContext, UserName) Fxit Sub EXCEPT: If (Not TableExists( Log )) Then Call reateTable(CreateLogQuery) Resume Flse Call Err.Raise(Err.Number, LogUtilities.WriteEntry , Err.Description) End If End Sub Private Sub DoWriteFntry (ByVal Number As Long, ByVal Source As String, ByVal Description As String, ByVal HelpFile As String, ByVal HelpContext As Long, Optional UserName As String) Dim SQL As String SQL = SFLFCT * FROM LOG Dim Recordset As New ADODB.Recordset 48:Call Recordset.Open(SQL, CurrentProject.Connection, adOpenDynamic, adLockPessimistic) 49: Recordset.AddNew 50: Recordset( ERROR ID ) = Number 51: Recordset ( SOURCF ) = Source 52 : Recordset ( DESCRIPTION . ) = Description jj: Recordset( HELPFILE ) = HelpFile 54: Recordset( HELPCONTEXT ) = HelpContext 55: Recordset( WHEN ) = Now 56: Recordset( USER ) = UserName 57: Recordset.Update 58: Recordset.Close 59: Set Recordset = Nothing 61: End Sub II Код листинга 23.3, рассматриваемый совместно с текстом листинга 23.2, I составляет содержимое модуля LogUtilities. Процедуре WriteError-Entry, расположенной в строках в качестве параметра передается 12: Dim Table As Variant 13 : 14: For Fach Table In CurrentData.AllTables 15: TableFxists = Table.Name = TableName 16: If (TableFxists) Then Fxit For 17: Next Table 18: 19:End Function 20 : 21:Public Sub WriteEntry(ByVal Number As Long, ByValSource As String, ByVal Description As String, ByVal HelpFile As String, ByVal HelpContext As Long, Optional UserName As String )
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |