Function
CreateErrorsTable() As Boolean
═════Dim dbs As Database, tdf As
TableDef, fld As Field, idx As Index
═════Dim rst As Recordset, intCode As Integer,
strErr As String
═════Const conAppObjErr =
"Application-defined or object-defined error"
═════?
создаем
таблицу Errors с полями ErrorCode и
ErrorString
═════Set dbs = CurrentDb
═════On Error Resume Next
═════? удаляем возможно
существующую таблицу Errors
═════dbs.TableDefs. Delete
"Errors"
═════On
Error GoTo Error_CreateErrorsTable
═════? создаем таблицу
═════Set tdf =
dbs.CreateTableDef("Errors")
═════? создаем поля
═════Set fld =
tdf.CreateField("ErrorCode", dbinteger)
═════tdf. Fields.Append fld
═════Set fld =
tdf.CreateField("ErrorString", dbMemo)
═════tdf. Fields.Append fld
═════dbs. TableDefs. Append tdf
═════? создаем индекс
═════Set idx =
tdf.CreateIndex("ErrorCodeIndex")
═════Set fld =
idx.CreateField("ErrorCode")
═════With idx
══════════.Primary = True
══════════.Unique = True
══════════.Required = True
═════End With
═════idx. Fields.Append fld
═════tdf. Indexes.Append idx
═════?
создаем
набор записей по таблице Errors
═════Set rst =
dbs.OpenRecordset("Errors")
═════? устанавливаем
индекс набора записей
═════rst. Index = "ErrorCodeIndex"
═════? меняем форму курсора на
часы
═════DoCmd. Hourglass True
═════? перебираем коды ошибок
═════For intCode = 1 То 32767
══════════On Error Resume Next
══════════strErr = ""
══════════?
пытаемся
генерировать соответствующую
ошибку
══════════Err, Raise intCode
══════════? Проверяем,
относится ли она к ошибкам VBA, DAO
или Access
══════════? Если она не
является ошибкой VBA, то свойство
Description
══════════? объекта Err
содержит строку "Application-defined or
══════════? object-defined error"
══════════If Err. Description <>
conAppObjErr Then
═══════════════strErr = Err.
Description
═══════════════?
чтобы
получить строку описания ошибки
DAO или Access,
═══════════════применяем метод
AccessError
═══════════════Elself
AccessError(intCode) <> conAppObjErr Then
═══════════════strErr =
AccessError(intCode)
══════════End If
══════════? если с номером
ошибки сопоставлена строка
описания,
══════════? добавляем ее в
таблицу
══════════If Len(strErr) > 0 Then
═══════════════? добавляем новую
запись в набор записей
═══════════════rst.AddMew
═══════════════' добавляем в
таблицу номер ошибки
═══════════════rst!ErrorCode
= intGode
═══════════════? добавляем в
таблицу строку описания
═══════════════rst!ErrorString.AppendChunk
strErr
═══════════════? обновляем запись
═══════════════rst.
Update
══════════End If
═════Next intCode
═════DoCmd. Hourglass False
═════?
закрываем
набор записей
═════rst. Close
═════MsgBox "Errors table
created"
═════? показываем новую таблицу
в окне Database
═════RefreshDatabaseWindow
═════CreateErrorsTable = True
Exit_CreateErrorsTable:
═════Exit Function
Error_CreateErrorsTable:
═════MsgBox "Error " & Err &
": " & Err. Description
═════CreateErrorsTable = False
═════Resume Exit_CreateErrorsTable
End Function