【问题标题】:Using Access VBA to get varchar OUTPUT parameter from SQL Server stored procedure使用 Access VBA 从 SQL Server 存储过程中获取 varchar OUTPUT 参数
【发布时间】:2016-07-21 13:42:12
【问题描述】:

我在 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

无论我尝试了什么,第一个参数都会出错。我怀疑这很简单。提前感谢您的帮助!

【问题讨论】:

  • 您是否尝试过将输出参数放在 SP 的最后而不是第一个?
  • 是的,这是我的典型做法,但我将它们转换为我的尝试之一。
  • 当我输入上面的内容时,VBA 会自动插入一个“;”如下:Debug.Print cn.Execute; "uspRecipeNote" & intMixID
  • 没问题。我尝试了几个使用括号的选项,但无济于事。当我尝试上面列出的内容时,我得到“程序或函数‘uspRecipeNote’需要参数‘@MixID’,未提供。”
  • 您也可以使用Execute 代替ADODB.Commands 并放入记录集Dim rs as New ADODB.Recordset 然后rs = connection_name.Execute ("EXEC uspRecipeNote @IngString OUTPUT, " & intMixID & ";")

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


【解决方案1】:

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

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

【讨论】:

  • 谢谢,但是当我尝试这样做时,我收到错误消息:“过程或函数 uspRecipeNote 指定了太多参数。”这是否提供了线索?
  • 它确实通过了添加参数,但现在在“cmd.Execute”处失败,并出现上述错误。
  • 我不知道,我刚试过(代码here),它对我有用。有没有可能@IngString@lngString 混在一起?或者在不同的架构下可能有多个版本的uspRecipeNote
  • 非常感谢。这是我重复使用的命令对象的问题,就像我以前多次使用的那样。这次我没能正确清除它,这解释了一些奇怪的行为,比如“参数太多”。哦,快乐...
  • 啊,好吧。重用 ADODB.Command 对象不是推荐的做法,因为可能会随之而来,而且不仅仅是因为这个原因(我记得)。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-12-13
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    相关资源
    最近更新 更多