Получение полных сообщений SQL Server в MS Access

Я перевожу нас с бэкэнда MS Access 2007 на бэкэнд SQL Server 2014.

Когда я пытаюсь выполнить сквозную вставку, я не получаю полное сообщение об ошибке SQL Server.

Dim qd As QueryDef
Dim rs As DAO.Recordset

On Error GoTo save_err

Set qd = CurrentDb.CreateQueryDef("")
qd.ReturnsRecords = False

If IsNull(Me.txtCategoryName) Then
    MsgBox "enter a category name"
Else
    qd.Connect = ConStringName
    qd.sql = "INSERT INTO [Categories] (name) VALUES  ('" & Text Field & "')"
    qd.Execute

End If

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

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

Мой текущий обработчик ошибок - это окно сообщения:

  MsgBox "FormName|SubName: " & Error$, vbCritical, "Error"

Если я переключу таблицу на связанную таблицу и попытаюсь вставить, ошибки не возникнет. Я хочу ошибку в этом случае.

Как получить полную ошибку в VBA?


person Elias    schedule 13.07.2017    source источник
comment
Откажитесь от DAO и используйте вместо этого ADODB. Затем вы можете объявить WithEvents conn As ADODB.Connection и обработать conn_InfoMessage и/или conn_ExecuteComplete, что даст вам объект параметра pError, который должен содержать подробное сообщение об ошибке. Или вы можете перебрать коллекцию Errors соединения. Я не вижу ничего похожего на просмотр членов библиотеки DAO в обозревателе объектов (F2).   -  person Mathieu Guindon    schedule 13.07.2017
comment
DAO — это то, что использует Access. Для SQL Server вы все равно захотите использовать ADODB.   -  person Mathieu Guindon    schedule 13.07.2017
comment
Я подумал, что DAO может быть проблемой. Прошло некоторое время с тех пор, как я работал с ADODB, поэтому я забыл разницу.   -  person Elias    schedule 13.07.2017
comment
ДАО не проблема.   -  person Gustav    schedule 13.07.2017