У меня есть приложение, разработанное в MS Access, которое использует ADO-соединения с SQL-сервером (Microsoft SQL Server 2017) для выполнения многочисленных хранимых процедур. Все соединения ADO выполняются через роль приложения, чтобы ограничить разрешения.
В последнем обновлении я создал несколько новых хранимых процедур, которые возвращают несколько наборов записей, которые вставляются в Excel. Моя проблема в том, что когда я выполняю эти хранимые процедуры, роль приложения удаляется ... Запрос выполняется без каких-либо проблем, но когда он завершается, роль приложения не устанавливается.
Ниже приведен пример вызова одного из сохраненных процедур в VBA Access:
Public Function CDTExceptionsReport() As ADODB.Recordset
On Error GoTo ErrorHandler
Set objConn = DB.MaintainConnection
On Error GoTo 0
If objCmd_ER Is Nothing Then
Set objCmd_ER = New ADODB.Command
With objCmd_ER
.CommandType = adCmdText
.CommandTimeout = 60 ' increase command
.CommandText = "EXEC tool.ExceptionsReport;"
.Prepared = True
' set connection object
.ActiveConnection = objConn
End With
End If
Set CDTExceptionsReport = objCmd_ER.Execute
On Error GoTo 0
Exit Function
ErrorHandler:
MsgBox "Error: " & Err.DESCRIPTION & vbNewLine & "Number: " & Err.Number
On Error GoTo 0 ' reset error handling
End Function
Обратите внимание, что objConn
- это мой объект подключения, а objCmd_ER
- моя глобальная команда. объект.
Через непосредственный терминал в VBA я могу проверить, какая роль активируется, используя в режиме отладки следующее:
Set RS = objConn.Execute("SELECT CURRENT_USER")
?RS.Fields(0)
Если я запускаю это до строки objCmd_ER.Execute
, яможно увидеть, что роль приложения все еще используется. Однако, когда я запускаю это сразу после этого оператора, роль приложения удаляется, и возвращается мое имя пользователя Windows. Кто-нибудь испытывал это раньше?
Я выполнил эту хранимую процедуру непосредственно в SQL Server, и она отлично работает и не выводит роль приложения из системы. Поэтому я думаю, что это как-то связано с соединением ADO.
Пожалуйста, дайте мне знать, какую дополнительную информацию было бы полезно предоставить. Хранимая процедура не содержит языка DDL или DML - всего 4 запроса на выборку.
Спасибо