使用Access VBA从SQL Server存储过程中获取varchar OUTPUT参数

时间:2016-04-01 16:43:27

标签: sql-server vba stored-procedures ms-access-2010

我在SQL Server中有以下存储过程,可以在SQL Server中调用它:

CREATE PROCEDURE uspRecipeNote
    @IngString varchar(255) OUTPUT,
    @MixID int = NULL
AS 
    SET NOCOUNT ON;
    SET @IngString = dbo.ufnRecipeNote(@MixID);

我一直在Access中使用VBA调用存储过程数月并且从未出现过问题,但是我已经尝试了几种可能性并且难以接受,取决于我尝试过的任何错误:

"参数对象定义不正确。提供的信息不一致或不完整。" "过程或函数uspRecipeNote指定的参数太多。"

以下是我在VBA中的所有内容:

Set cmd.ActiveConnection = cn
cmd.CommandTimeout = 0
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "uspRecipeNote"

'add parameters
cmd.Parameters.Append cmd.CreateParameter("@IngString", adVarChar, adParamOutput)
cmd.Parameters.Append cmd.CreateParameter("@MixID", adInteger, adParamInput, , intMixID)

cmd.Execute

无论我尝试过什么,我都会在第一个参数上出错。我怀疑这很简单。在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

字符串参数需要定义为(最大)长度,例如

cmd.Parameters.Append cmd.CreateParameter("@IngString", adVarChar, adParamOutput, 255)

答案 1 :(得分:0)

感谢所有帮助我们解决问题的人。事实证明,这是我的命令对象的问题,而不是SP或VBA(除了需要varchar参数的长度 - 感谢,Gord)。现在一切正常!