从VB 6.0调用Access 2007中的存储过程

时间:2010-11-24 15:36:55

标签: stored-procedures vb6 ms-access-2007 adodb

我需要从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 是我需要解决的问题。如何从那里正确调用存储过程?

3 个答案:

答案 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