Подскажите, как в ADP получать коды ошибок БД? Предположим, выполняется какая-нибудь операция. Например, удаление записи. (Не в VB, а через GUI) Возникает ошибка. Как можно узнать ее код, описание и др - то, что сообщает сервер? У Connection есть коллекция Errors, но я в нее заглядывал - а там пусто. А обрабатывать из надо...
От: Вакшуль Сергей 14.03.2002
Что у нас есть? У нас есть текст сообщения, выдаваемый Access по событию Error формы. Здесь можно получить как сообщение от самого сервера, так и текст ошибок генерируемых вами в триггерах и сохраненных процедурах через RaiseError. Именно на этот тест и можно положится в своем обработчике. Ну нет у вас номеров ошибок SQL, так зато сообщения есть. Вот их и можно обрабатывать.
Пример кода модуля формы: ________________________ Option Compare Database Option Explicit Dim WithEvents rst As ADODB.Recordset
Private Sub Form_Error(DataErr As Integer, _ Response As Integer) Select Case DataErr Case 2757 Response = acDataErrContinue End Select End Sub
Private Sub Form_Open(Cancel As Integer) Set rst = Me.Recordset End Sub
Private Sub rst_RecordChangeComplete(ByVal adReason As _ ADODB.EventReasonEnum, ByVal cRecords As Long, _ ByVal pError As ADODB.Error, adStatus As _ ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) If Not pError Is Nothing Then MsgBox "Сообщение у вас в руках" Debug.Print pError.Description End If End Sub _______________________
Приведенный выше вариант я специально для вас протестировал - работает. Есть еще вариант, непроверенный мной :) Суть в следующем. Можно попробовать открыть другой конект, отличный от CurrentProject.Connection, открыть рекордсет в этом конекте и подсунуть его форме. При возникновении ошибки в форме при работе с записями нужно будет изучить семейство Errors объекта Connection вашего рекордсета. Дело в том, что CurrentProject.Connection имеет свои причуды, а вот открытый вами с нуля Connection, по идее, должен работать так как положено.
Примечание: В Access2002 DataErr содержт номер. Теперь он позволяет более тонко обрабатывать ошибки генерируемые SQL Server.