开发者

Calling a Stored Procedure in Access 2007 from VB 6.0

开发者 https://www.devze.com 2023-01-27 06:43 出处:网络
I need to call a stored procedure that was created in Access 2007 from the program in VB 6.0. This is the working Stored Procedure on the Access db when you right click -> Design View:

I need to call a stored procedure that was created in Access 2007 from the program in VB 6.0.

This is the working Stored Procedure on the Access db when you right click -> Design View:

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'));

This is the code that needs fixing in VB 6.0:

Set TransRs = New ADODB.Recordset
Dim transcommQuery As String
transcommQuery = "execute SP_SumOfTransComm " & prodcode & " " & orderNum

TransRs.Open transcommQuery, db, adOpenDynamic, adLockBatchOptimistic

Line 3: transcommQuery = "execute SP_SumOfTra开发者_高级运维nsComm " & selProdcode & " " & selPolNo is the one I need fixing. How to correctly call the Stored Procedure from there?


You can use Command objects to call stored procedures. For detailed information you can take a look here.

Your code would look something like:

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()


Your parameters should be enclosed in quotes and separated by commas e.g.

transcommQuery = "EXECUTE SP_SumOfTransComm '@prodcode', '@orderNum';"
transcommQuery = Replace$(transcommQuery, "@prodcode", prodcode)
transcommQuery = Replace$(transcommQuery, "@orderNum", orderNum)

...but then you have to worry about escaping quotes and other such nasties.

Better to use a Command object with strongly-typed Parameter objects and let the OLE DB provider handle sanitizing values. See @MicSim's answer for some example code.


It is working for me now, doing the following:

Set TransRs = New ADODB.Recordset
Dim transcommQuery As String

transcommQuery = "{ call SP_SumOfTransComm('" & prodcode & "','" & orderNum & "') }"

TransRs.Open transcommQuery, db, adOpenDynamic, adLockBatchOptimistic
0

精彩评论

暂无评论...
验证码 换一张
取 消