Возвращаемое значение VBA из хранимой процедуры «слишком много аргументов указано» - PullRequest
0 голосов
/ 17 июня 2019

У меня есть хранимая процедура, которая возвращает значение 0 или 1, в зависимости от того, существует ли указанное имя пользователя Windows в таблице.

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

[Microsoft] [Драйвер ODBC SQL Server] [SQL Server] Процедура или функция 'x01_sl_getUserExists' имеет слишком много аргументов.

Упрощенная хранимая процедура здесь:

USE [Database]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[Procedure] 
    @windowsAD nvarchar(50)
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @usrStatus int

    SELECT @usrStatus = COUNT(1) FROM [SYS_Login] as lgn WHERE lgn.[SYS_LoginAD] = @windowsAD;

    RETURN @usrStatus
END

Код VBA для выполнения и возврата здесь:

Dim db As ADODB.Connection
Dim pr As ADODB.Parameter
Dim pr2 As ADODB.Parameter
Dim sp2 As ADODB.Command
Dim usrStatus as Integer

Set db = New ADODB.Connection
Set sp2 = New ADODB.Command
Set pr = sp2.CreateParameter("ReturnValue", adInteger, adParamReturnValue)
Set pr2 = sp2.CreateParameter("@windowsAD", adVarChar, adParamInput, 50, getUserID)

With sp2
    .CommandText = "Procedure"
    .CommandType = adCmdStoredProc
    .ActiveConnection = db
    .Parameters.Refresh
    .Parameters.Append pr
    .Parameters.Append pr2
End With

sp2.Execute '// CODE FAILS HERE
usrStatus = sp2.Parameters("@return_value")

По сути, я хочу получить значение ВОЗВРАТА 0 (пользователь не существует) или 1 (пользователь существует), чтобы я мог присвоить его переменной usrStatus и перейти оттуда.

1 Ответ

2 голосов
/ 17 июня 2019

.Parameters.Refresh заполняет коллекцию Parameters, перейдя на сервер и прочитав метаданные процедуры.

Затем вы добавляете те же параметры вручную, получая четыре параметра вместо двух.

Либо удалите Refresh, либо не создавайте параметры вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...