2016-06-22 1 views
3

Я использую событие form_error в MS Access для ошибок catch, которое дает только dataerr integer, а не описание, подобное ошибке vba, однако MS Website дает следующее описание мероприятия:Как вернуть описание с помощью события form_error в MS Access

Вы можете использовать аргумент DataErr с функцией ошибки, чтобы отобразить номер в соответствующее сообщение об ошибке

Но на самом деле не дают пример этого, и я пытаясь понять это.

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

Есть ли простой способ сделать это?

+0

Вы можете попробовать коллекцию 'DBEngine.Errors' (это другое дело, чем объект' VBA.Err'), см. Https://msdn.microsoft.com/en-us/library/office/ff835711. aspx. Полезно получить дополнительную информацию об ошибках ODBC, я не уверен, что это поможет в вашем случае. – Andre

+0

Я пробовал запускать это в разных местах, но коллекция всегда пуста, коллекция, похоже, больше связана с попыткой открыть внешнюю базу данных, чем работать в одном –

ответ

1

Обычно это просто передать номер, Ошибки для получения описания:

MsgBox Error(DataErr) 
+0

К сожалению, это просто возвращает определенную или определяемую объектами ошибку в msgbox –

+1

Вы запустили его в самой подфункции? Во всяком случае, я считаю, что распространенными ошибками являются следующие: [Настройка DataErr 2169] http://www.tek-tips.com/viewthread.cfm?qid=1080271 – Gustav

+0

Да, он работает в подфункции. Предоставляемая вами ссылка идет в том же направлении, что и предложение AVG выше использования события перед обновлением, а не событие on error, хотя опять же не относится к проверкам ссылочной целостности, а скорее к ситуациям с ошибками, где этого числа достаточно. Кажется, разочарование в том, что это решение. Сообщение об ошибке, которое мне нужно в моем коде, находится прямо там, в сообщении по умолчанию, но, похоже, нет возможности работать с ним. –

2

Создать отдельную функцию для выполнения всех ваших проверки и сообщений пользователя ничего не хватает. Запустите это в событии beforeupdate формы и отмените событие, если это необходимо. Это, вероятно, устранит многие из ваших форм. В событии form_error вы можете вызвать ту же функцию. Он обнаружил проблему, подавив сообщение по умолчанию. Любая другая ошибка, которая появляется, вы можете обрабатывать отдельно, если это необходимо.

+0

Это нормально для отсутствующих данных и т. Д. Однако я специально ссылаюсь на ссылочную целостность. Чтобы убедиться в этом, я бы поверил, что мне придется спуститься по маршруту DLookup, что, похоже, связано с большими усилиями, чтобы обойти функциональные возможности взаимосвязанных соединений. –

+1

Я согласен, что это не идеально, однако AFAIK, что вам (и всем нам) хотелось бы, не существует. Поиск должен быть минимальным, если вы используете комбобокс и/или списки для ввода данных. – AVG

+0

Я думаю, что предыдущий комментарий был бы моим ответом тоже. Если пользовательский вход может сломать ref. целостность, не допускайте произвольного ввода, позволяйте пользователю выбирать из выпадающего списка. @HelloWorld – Andre

0

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

Private Sub cmdSearch_Click() 
On Error GoTo Sub_Err 

    --Your code here--- 

'errors catching stuff 
Sub_Exit: 
    Exit Sub 
Sub_Err: 
    MsgBox Error$ 
    Resume Sub_Exit 
End Sub 

Используйте то же самое для каждого sub вы используете в коде.

+0

Это не относятся к событию form_error, кнопка не нажата, а ошибка $ ничего не возвращает в случае этого вопроса, это именно та проблема –

Смежные вопросы