我需要从VB 6.0中的程序调用在Access 2007中创建的存储过程。
当您右键单击时,这是Access数据库上的工作存储过程 - >设计视图:
PARAMETERS prodCode Text ( 255 ), orderNum Text ( 255 );
SELECT Sum(FullPrice) AS Expr1
FROM Transacs
WHERE (((Transacs.prodcode)=[prodCode]) AND ((Transacs.ordernum)=[orderNum]) AND ((Transacs.Type)='R'));
这是需要在VB 6.0中修复的代码:
Set TransRs = New ADODB.Recordset
Dim transcommQuery As String
transcommQuery = "execute SP_SumOfTransComm " & prodcode & " " & orderNum
TransRs.Open transcommQuery, db, adOpenDynamic, adLockBatchOptimistic
第3行: transcommQuery =“执行SP_SumOfTransComm”& selProdcode& “”& selPolNo 是我需要解决的问题。如何从那里正确调用存储过程?
答案 0 :(得分:2)
您可以使用Command对象来调用存储过程。有关详细信息,请查看here。
您的代码看起来像:
Dim Cmd1 As ADODB.Command
Set Cmd1 = New ADODB.Command
Cmd1.ActiveConnection = db
Cmd1.CommandText = "SP_SumOfTransComm"
Cmd1.CommandType = adCmdStoredProc
Cmd1.Parameters.Append Cmd1.CreateParameter(, adVarWChar, , 255, prodcode)
Cmd1.Parameters.Append Cmd1.CreateParameter(, adVarWChar, , 255, orderNum)
Dim TransRs As ADODB.Recordset
Set TransRs = Cmd1.Execute()
答案 1 :(得分:0)
您的参数应该用引号括起来并用逗号分隔,例如
transcommQuery = "EXECUTE SP_SumOfTransComm '@prodcode', '@orderNum';"
transcommQuery = Replace$(transcommQuery, "@prodcode", prodcode)
transcommQuery = Replace$(transcommQuery, "@orderNum", orderNum)
...但是你必须担心逃避报价和其他类似的恶意。
最好使用带有强类型Command
对象的Parameter
对象,并让OLE DB提供程序处理清理值。有关示例代码,请参阅@ MicSim的答案。
答案 2 :(得分:0)
现在正在为我工作,做了以下事情:
Set TransRs = New ADODB.Recordset
Dim transcommQuery As String
transcommQuery = "{ call SP_SumOfTransComm('" & prodcode & "','" & orderNum & "') }"
TransRs.Open transcommQuery, db, adOpenDynamic, adLockBatchOptimistic