powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запись кода ошибки БД в таблицу
22 сообщений из 22, страница 1 из 1
запись кода ошибки БД в таблицу
    #39191923
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Есть БД SQL server+Access 2013. К БД обращаются примерно 150 пользователей. на компьютерах пользователей установлен не полный аксесс, а Runtime. При работе периодически возникают ошибки - иногда даже при запуске приложения. При этом Runtime закрывается с критической ошибкой. Можно ли записать в отдельную таблицу код и описание ошибки при её возникновении чтобы при необходимости выгрузить записи и посмотреть, что у кого произошло? как это можно сделать? В БД я сделал отдельную таблицу для этих записей: Ошибки(КодЗаписи, КодОшибки, дата, пользователь). Помогите пожалуйста.
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39191926
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jediAlexпри запуске приложения... закрывается с критической ошибкой.
Можно ли программой записать данные в БД, если программа не запустилась? сам-то как думаешь...
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39191933
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinajediAlexпри запуске приложения... закрывается с критической ошибкой.
Можно ли программой записать данные в БД, если программа не запустилась? сам-то как думаешь...
ну есть способ вытащить код ошибки? например в файл?
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39191938
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jediAlexесть способ вытащить код ошибки? например в файл?
Конечно... открываешь журнал событий (разделы Система и Приложение) и сохраняешь в файл...
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39191941
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
юзеры в журнал событий не полезут...они не знают вообще что это
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39191946
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jediAlexюзеры в журнал событий не полезут...они не знают вообще что это
Дык и не надо.
Ставте обработчики ошибок.
Попытайтесь локализовать ошибку.
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39192003
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Само собой нужна обработка ошибок, причем для точной локализации проблемы строки нужно пронумеровать, а в записи об ошибке или просто в сообщении пользователю выводить номер строки, где произошла ошибка. Нумеровать строки умеет, например, MZ-Tools. Он же и вставляет обработчики по нажатию кнопки.

Я, например, использую обработчики такого типа:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Private Sub Command2_Click()

10    On Error GoTo ErrorHandler

20    DoCmd.Close

ExitHere:
30       On Error Resume Next
40       Exit Sub

ErrorHandler:
50    Select Case Err
      Case 0
60       Resume Next
70    Case Else
80       MsgBox "Error " & Err.Number & " (" & Err.Description & "), Line " & Erl & " in procedure Command2_Click of Form_Form1", vbExclamation + vbMsgBoxHelpButton, "Error " & Now(), Err.HelpFile, Err.HelpContext
90       Resume ExitHere
100   End Select
End Sub


Есть варианты, где вместо сообщения вызывается процедура, которая пишет ошибку в таблицу и отсылает сообщение с деталями на почту.
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39192011
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а метод WriteErrorToTable объекта Err? как правильно использовать этот метод?
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39192022
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так вот что за таблица должна быть? её самому создавать? какая структура этой таблицы должна быть? Как записать информацию об ошибке в таблицу? метод записи в общем я наверное нашел, но как им пользоваться...
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39192046
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShinЕсть варианты, где вместо сообщения вызывается процедура, которая пишет ошибку в таблицу и отсылает сообщение с деталями на почту.Ага, из обработчика ошибок... что такое double fault - знаешь?
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39192164
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaMrShinЕсть варианты, где вместо сообщения вызывается процедура, которая пишет ошибку в таблицу и отсылает сообщение с деталями на почту.Ага, из обработчика ошибок... что такое double fault - знаешь?
Предусмотрено там это. В случае ошибки внутри обработчика ошибки выдается сообщение о совсем непредвиденной ошибке с текстами обеих ошибок :)
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39192173
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jediAlexа метод WriteErrorToTable объекта Err?

У объекта Err нет такого метода, насколько мне известно.
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39197149
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
написал функцию для записи ошибки в таблицу:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Function Err_Routine()
On Error GoTo Err_Routine
Err_Routine:
Set rst = CurrentDb.OpenRecordset("ErrorsDatabase")
With rst
.AddNew
!НомерОшибки = Str(Err.Number)
!Описание = Err.Description
!Пользователь = CurrentUser
!Дата = Date
!Время = Time
.Update
End With
Set rst = Nothing
Exit_err_routine:
Exit Function

End Function


эту функцию поместил в общий модуль и вызываю её макросом при открытии БД(т.к. чаще всего ошибки при открытии происходят). При открытии БД срабатывает макрос, который запускает форму-навигатор по приложению. я изменил имя формы и получил ошибку при запуске БД.При этом моя функция сработала, но не записывается в таблицу код ошибки и описание ошибки(Description). В таблицу ошибок я добавил поле "Описание" с типом данных "Длинный текст", куда надо записывать Description ошибки. Полю "НомерОшибки" присваивается ноль, а описание ошибки пустое. имя пользователя, дата и время заполняются. Что не так?
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39197190
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jediAlex,
вы куда идете по переходу
не перепутали ли вы метки
да и запонить надо текущую ошибку
Код: vbnet
1.
2.
On Error GoTo Err_Routine
Err_Routine:



уберите On Error GoTo Err_Routine для отладки
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39197205
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объект Err сбрасывается у вас после первой же команды по открытию рекордсета. Сначала запомните текущие значения, а потом все остальное. Да и выносить нужно запись ошибки в отдельную процедуру со своим обработчиком ошибок, а туда передавать только номер ошибки, описание, название процедуры, модуля и номер линии.
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39197255
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробовал так - перед открытием рекордсета запомнить значения:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Function Err_Routine()
Dim NumberError As Long
Dim decrError As String
On Error GoTo Err_Routine
NumberError = Err.Number
decrError = Err.Description
Err_Routine:
Set rst = CurrentDb.OpenRecordset("ErrorsDatabase")
With rst
.AddNew
!НомерОшибки = NumberError
!Описание = decrError
!Пользователь = CurrentUser
!Дата = Date
!Время = Time
.Update
End With
Set rst = Nothing
Exit_err_routine:
Exit Function

End Function


результат тот же...
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39197262
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jediAlexрезультат тот же...

Конечно! Команда
On Error GoTo Err_Routine
также сбрасывает объект Err.
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39197274
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должно быть примерно так:

Объявляем обработчик в процедуре

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Public Function MyFunction()

On Error GoTo ErrorHandler

'.... тут мы что-то делаем, что может сгенерировать ошибку

ExitHere:
    On Error Resume Next
    ' тут мы закрываем открытые объекты и делаем прочие завершающие вещи
    Exit Function

ErrorHandler:
    ' вызываем собственно обработчик с записью ошибок
    LogError Err.Number, Err.Description, Erl, "MyFunction", "bas_MyModule"
    Resume ExitHere
End Function



А в обработчике уже пишем данные и выводим сообщение. Вот мой обработчик, берите, если хотите. Чтобы номер строки был не нулевым, строки основного кода должны быть пронумерованы.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
Function LogError(ByVal lngErrNumber As Long, ByVal strErrDescription As String, strLine As String, _
                  strCallingProc As String, Optional strCallingModule As String, Optional vParameters = "{Missing}", Optional bShowUser As Boolean = True) As Boolean
    On Error GoTo Err_LogError
    ' Purpose: Generic error handler.
    ' Logs errors to table "ErrorLog".
    ' Arguments: lngErrNumber - value of Err.Number
    ' strErrDescription - value of err.description
    ' strLine - code line number (Erl) Erl=0 if no row number in the line
    ' strCallingProc - name of sub|function that generated the error.
    ' strCallingModule - name of code module that generated the error.
    ' vParameters - optional string: List of parameters to record.
    ' bShowUser - optional boolean: If False, suppresses display.
    Dim strMsg As String                              ' String for display in MsgBox
    Dim rst    As DAO.Recordset                       ' The Aph_tblErrorLog table
    Select Case lngErrNumber
        Case 0
            Debug.Print strCallingProc & " called error 0."
        Case 2501                                     ' Cancelled
            'Do nothing.
        Case Else
            If bShowUser Then
                strMsg = "Error " & lngErrNumber & " (" & strErrDescription & "), Line " & strLine & " in procedure " & _
                strCallingProc & ", module " & strCallingModule
                MsgBox strMsg, vbExclamation, "Error " & Now()
            End If
            Set rst = CurrentDb.OpenRecordset("tbl_ErrorLog", , dbAppendOnly)
            rst.AddNew
            rst![ErrorNumber] = lngErrNumber
            rst![ErrorDescription] = Left$(strErrDescription, 255)
            rst![CreatedTimeStamp] = Now()
            rst![ErrLine] = strLine
            rst![CallingProc] = strCallingProc
            rst![Module] = strCallingModule
            rst![UserName] = GetOSUserName()
            rst![PersonID] = 1
            rst![ShowUser] = bShowUser
            If vParameters <> "{Missing}" Then
                rst![Parameters] = Left(vParameters, 255)
            End If
            rst.Update
            rst.Close
            LogError = True
            
    End Select
    
Exit_LogError:
    Set rst = Nothing
    Exit Function
Err_LogError:
    strMsg = "An unexpected situation arose in your program." & vbCrLf & _
             "Please write down the following details:" & vbCrLf & vbCrLf & _
             "Calling Proc: " & strCallingProc & vbCrLf & _
             "Error Number " & lngErrNumber & " in line " & strLine & vbCrLf & strErrDescription & vbCrLf & vbCrLf & _
             "Unable to record because Error " & Err.Number & " in line " & Erl & vbCrLf & Err.Description
    MsgBox strMsg, vbCritical, "LogError()"
    Resume Exit_LogError
End Function

...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39197627
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно ли программно записать ошибку DSN при подключении к БД на сервере? если можно, как это сделать?
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39199338
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сделал так:
при загрузке главной формы срабатывает обработчик:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub Form_Load()

On Error GoTo ErrorHandler

DoCmd.SetWarnings False
DoCmd.OpenQuery "ОтчетыДляУдаления", acViewNormal, acEdit
DoCmd.SetWarnings True
ExitHere:
   On Error Resume Next
       Exit Sub
    
ErrorHandler:
    
    Err_Routine Err.Number, Err.Description, "FormsModule"
    Resume ExitHere
End Sub


Err_Routine - функция в общем модуле "FormsModule" ,которая записывает содержание ошибки в таблицу базы данных. Текст функции:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Function Err_Routine()
Dim NumberError As Long
Dim decrError As String
NumberError = Err.Number
decrError = Err.Description
GoTo Err_Routine
Err_Routine:
Set rst = CurrentDb.OpenRecordset("ErrorsDatabase")
With rst
.AddNew
!НомерОшибки = NumberError
!Описание = decrError
!Пользователь = Environ("username")
!ИмяКомпьютера = Environ("Computername")
!Дата = Date
!Время = Time()
.Update
End With
Set rst = Nothing
Exit_err_routine:
Exit Function
End Function


При запуске БД обработчик и функция срабатывают как надо - содержимое ошибки, имя пользователя, имя компьютера, дата и время записываются в таблицу, но на строке
Код: vbnet
1.
Err_Routine Err.Number, Err.Description, Erl, "Form_Load", "FormsModule"

вылетает ошибка "13 type mismatch"
что не так с типами и где? не пойму...
Структура таблицы для записи ошибок("ErrorsDatabase"): код -счетчик, ключ;НомерОшибки - целое;Описание - короткий текст;Пользователь - короткий текст;ИмяКомпьютера - короткий текст;Дата - дата и время(краткий формат даты);Время - дата и время(краткий формат времени).Помогите пожалуйста
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39199438
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jediAlex,
Код: vbnet
1.
2.
Function Err_Routine( )
...


Код: vbnet
1.
Err_Routine Err.Number, Err.Description, Erl, "Form_Load", "FormsModule"

Эммм... Не понял. А где список имён и типов передаваемых параметров?
...
Рейтинг: 0 / 0
запись кода ошибки БД в таблицу
    #39199457
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все, разобрался
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запись кода ошибки БД в таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]