【发布时间】:2014-11-19 08:38:18
【问题描述】:
似乎是一个常见问题,但我找不到任何示例来处理我的代码。
如果这是微不足道的,请提前抱歉,因为我是 DBA 而不是开发人员。
我有一个需要两个参数LaborRate 和EndDate 的存储过程。 LaborRate 是十进制数据类型,将从工作表 BOMSum 和单元格 G1 中获取其变量。 EndDate 是日期数据类型,将从工作表 BOMSum 和单元格 G2 中获取其变量。即使浏览了本网站上的教程和其他建议,我的所有尝试都失败了。
这是我开始使用的非常简单的代码,它实际上运行正确,但在没有指定任何参数的情况下运行:
Sub Execute_SP()
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=SQLOLEDB;Data Source=<ServerName>;Initial Catalog=<DB>;User ID=<DB_User>;Password=<pwd>"
conn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "CostingInfo"
cmd.Execute
conn.Close
Set conn = Nothing
Set cmd = Nothing
ActiveWorkbook.RefreshAll
End Sub
这就是我现在所拥有的。我正在尝试从单元格 G1 和 G2 传递两个参数 LaborRate 和 EndDate。
Sub Execute_SP()
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim prm1 As ADODB.Parameter
Dim prm2 As ADODB.Parameter
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=SQLOLEDB;Data Source=<ServerName>;Initial Catalog=<DB>;User ID=<DB_User>;Password=<pwd>"
conn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = CostingInfo
prm1 = cmd.CreateParameter("@LaborRate", adDecimal, adParamInput)
prm1.Precision = 28
prm1.NumericScale = 4
cmd.Parameters.Append prm1
prm1.Value = ActiveSheet.Range("G1").Text
prm2 = cmd.CreateParameter("@endDate", adDate, adParamInput)
prm2.Value = ActiveSheet.Range("G2").Text
cmd.Parameters.Append prm2
cmd.Execute
conn.Close
Set conn = Nothing
Set cmd = Nothing
ActiveWorkbook.RefreshAll
End Sub
我收到关于精度和对象变量或未设置块变量的错误。我被 VBA 编程难住了。
编辑:在 Rude Dawg 提出一些建议后,这是我的代码。我现在收到“语法错误或访问冲突”错误,当被调试时指向有问题的 cmd.Execute 部分:
Sub Execute_SP()
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim prm1 As ADODB.Parameter
Dim prm2 As ADODB.Parameter
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=SQLOLEDB;Data Source=<ServerName>;Initial Catalog=<DB>;User ID= <DB_User>;Password=<pwd>"
conn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = CostingInfo
set prm1 = cmd.CreateParameter("@LaborRate", adDecimal, adParamInput)
prm1.Precision = 28
prm1.NumericScale = 4
prm1.Value = Sheets("BOMSum").Range("G1").VALUE
cmd.Parameters.Append prm1
set prm2 = cmd.CreateParameter("@endDate", adDate, adParamInput)
prm2.Value = Sheets("BOMSum").Range("G2").VALUE
cmd.Parameters.Append prm2
cmd.Execute
conn.Close
Set conn = Nothing
Set cmd = Nothing
ActiveWorkbook.RefreshAll
End Sub
【问题讨论】:
标签: vba excel stored-procedures parameter-passing