【问题标题】:Failed to pass parameter to stored procedure from Excel macro无法将参数从 Excel 宏传递到存储过程
【发布时间】:2015-11-13 03:29:18
【问题描述】:

我在 SQL Server 中有一个无法编辑的存储过程。要在 SQL Server 中执行,我必须传递一个参数,这是强制性的。如果我使用“1”,程序将以打印模式运行,而实际程序将以“0”运行。我编写了以下代码,该代码执行时没有错误,并捕获存储过程成功运行但处于打印模式的日志。

请告诉我传递参数'0'需要做的改变

Sub RunProc()

Dim con As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset

Set con = New ADODB.Connection
Set cmd = New ADODB.Command
Set rs = New ADODB.Recordset

Set objSheet = ThisWorkbook.Sheets("Queries")
strServerNAme = CStr(objSheet.Cells(4, 2).Value)
strDatabase = CStr(objSheet.Cells(5, 2).Value)
strProcName = CStr(objSheet.Cells(6, 2).Value)
' Log into our SQL Server, and run the Stored Procedure

strConnection = "Driver={SQL Server}; Server=" & strServerNAme & "; Database=" & strDatabase & " ;"
con.Open strConnection
cmd.ActiveConnection = con
cmd.Parameters.Append cmd.CreateParameter(, adBoolean, adParamInput, False)

cmd.CommandText = strProcName
Set rs = cmd.Execute(, , adCmdStoredProc)

con.Close
Set con = Nothing

End Sub    

【问题讨论】:

  • 如果您能向我们展示存储过程的标头(过程主体之前的 CREATE PROC ... 内容)将会很有帮助。
  • 根据this,CreateParameter 需要5 个参数:CreateParameter (Name, Type, Direction, Size, Value)。看起来您缺少一个,因此当您的意思是 False 作为值时,您可能会将 False 作为 Size 传递
  • 实际方式:CreateParameter (Name, Type, Direction, Size, Value)。看起来我错过了一个。所以在改变之后..它wotked

标签: sql-server excel vba stored-procedures parameter-passing


【解决方案1】:

我猜,我会说改变这一行:

cmd.Parameters.Append cmd.CreateParameter(, adBoolean, adParamInput, False)

到这里:

cmd.Parameters.Append cmd.CreateParameter("@paramName", adBoolean, adParamInput, False)

使用实际的参数名称。

【讨论】:

  • 以上提供的建议没有帮助。
  • @Lakshmi 然后我们需要查看存储过程才能更进一步。
  • 我无法在此处显示存储过程。有没有其他方法可以解决这个问题?
  • 没有。我们不是通灵者,所以如果你不能向我们展示调用界面,那么我们就无法判断你尝试调用它时出了什么问题。
  • CreateParameter (Name, Type, Direction, Size, Value)。看起来我错过了 5 个字段中的一个。所以在改变之后..它工作得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 2017-08-12
  • 2012-05-08
  • 2016-04-05
相关资源
最近更新 更多