Вызов хранимой процедуры из Access VBA прерван с помощью «Запустить инструкцию RECONFIGURE для установки» - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть Access ADP, связанный с бэкэндом SQL Server 2005.Я пытаюсь реализовать хранимую процедуру для обновления адресов наших клиентов, которая требует от меня выполнения программы из командной строки, используя xp_cmdshell.Процедура отлично работает из SSMS, но когда я вызываю ее из Access VBA через объект ADO Connection, она выдает следующую «ошибку»:

Ошибка времени выполнения '-2147217900' (80040e14): Параметр конфигурации «Показать дополнительные параметры» изменен с 0 на 1. Запустите для установки оператор RECONFIGURE.

На самом деле это не ошибка - это стандартное сообщение, которое SQL Server выдает при выполнении sp_configure.Хранимая процедура вызывает RECONFIGURE, но по какой-то причине Access интерпретирует сообщение как ошибку.

Любая идея, как я могу это остановить?

Для чего это стоит, вот некоторыекода я использую.Это хранимая процедура для включения / выключения xp_cmdshell:

ALTER PROCEDURE [dbo].[spEnableXpCmdShell]
    (@enabled bit)
WITH EXECUTE AS 'NKA\jrosenberg'
AS
SET NOCOUNT ON

    EXEC sp_configure 'show advanced options', 1
    RECONFIGURE

    EXEC sp_configure 'xp_cmdshell', @enabled
    RECONFIGURE

    EXEC sp_configure 'show advanced options', 0
    RECONFIGURE

Она вызывается из моего основного sp, который довольно длинный, например так:

EXEC [dbo].[spEnableXpCmdShell] 1

Наконец, вотнесколько сокращенная версия оскорбительного кода VBA:

Public Function DoNCOA(con, Optional caseId = Null, _
                                 Optional docId = Null) As Integer

    'Call the NCOAProces stored procedure asynchronously.
    'Returned integer is not success or failure, but position in the queue

    On Error GoTo ErrHandler

    Dim cmd As New ADODB.Command, _
        prm As ADODB.Parameter

    With cmd
        .ActiveConnection = con
        .CommandText = "spNCOAProcess"
        .CommandType = adCmdStoredProc
        .CommandTimeout = 1800 
        Set prm = .CreateParameter("CaseID", adInteger, adParamInput, , caseId)
        .Parameters.Append prm
        Set prm = .CreateParameter("DocID", adInteger, adParamInput, , docId)
        .Parameters.Append prm
        .Execute Options:=adAsyncExecute, adExecuteNoRecords
    End With

    [...That's all the important stuff]

End Function

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 23 апреля 2012

Как насчет запуска sp_configure в блоке try / catch, чтобы сообщение не возвращалось клиенту? http://msdn.microsoft.com/en-us/library/ms175976(v=sql.90).aspx

...