【问题标题】:Excel vba SQL Stored procedure calling with input parametersExcel vba SQL存储过程调用与输入参数
【发布时间】:2018-02-06 20:25:23
【问题描述】:

提前谢谢你。我正在尝试从接受输入参数的 excel 运行存储过程,它给出了错误运行时错误“-2147217900 (80040e14)”自动化错误。

   Set cmd1 = New ADODB.Command
             With cmd1
             .ActiveConnection = sConnString
             .CommandText = "spGetPriceChangeTest"
             .CommandType = adCmdStoredProc
             .CommandTimeout = 360
             .Parameters.Append .CreateParameter("@suppliercode", adVariant, adParamInput, , Range("A" & (x + 2)).Value)
             .Parameters.Append .CreateParameter("@date1", adDBTimeStamp, adParamInput, , datetime)
             .Parameters.Append .CreateParameter("@proddescription", adVariant, adParamInput, , Range("D" & (x + 1)).Value)
             .Parameters.Append .CreateParameter("@vendorcode", adVariant, adParamInput, , Range("C" & (x + 2)).Value)
             .Parameters.Append .CreateParameter("@type", adVariant, adParamInput, , Range("B" & (x + 2)).Value)
             End With
             Set rst1 = New ADODB.Recordset
             Set rst1 = cmd1.Execute

【问题讨论】:

  • 你在 Set-ing 两次完全相同的对象引用:Set rst1 = New ADODB.Recordset 是多余的,可以删除。
  • 某处没有实际打开的连接吗?哪个特定行抛出错误?
  • 删除了它。同样的错误。
  • 我知道,我只是说这是多余的。您在任何地方都有.OpenADODB.Connection 对象吗?我从来没有在没有明确的ADODB.Connection 的情况下使用ADODB.Recordset...也尝试从参数名称中删除@,并确保以与SP 期望的完全相同的顺序提供参数。
  • 你将不得不更加努力地尝试......所以是问答,而不是“握住我的手直到它起作用”;-)

标签: vba excel stored-procedures input-parameters


【解决方案1】:

创建参数时,确保.CreateParameter("",adVarchar,10,value)中提到SQL中定义的大小

这篇文章有帮助。它详细讨论了我们如何捕获错误。

https://support.microsoft.com/en-us/help/167957/info-extracting-error-information-from-ado-in-vb

【讨论】:

    【解决方案2】:

    尝试使用EXEC

    .CommandText = "exec spGetPriceChangeTest"
    

    【讨论】:

    • 鉴于.CommandType = adCmdStoredProc,我怀疑会是这样。将.CommandType 更改为adCmdText 也可以,但也可以。
    • 我有另一个不接受任何参数的存储过程,它完美地像上面的代码一样工作。我感觉数据类型或日期时间参数是个问题。
    猜你喜欢
    • 2017-12-25
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    相关资源
    最近更新 更多