Stored procedures 从vb6.0调用access2007中的存储过程

Stored procedures 从vb6.0调用access2007中的存储过程,stored-procedures,vb6,ms-access-2007,adodb,Stored Procedures,Vb6,Ms Access 2007,Adodb,我需要从VB6.0中的程序调用Access 2007中创建的存储过程 这是右键单击->设计视图时Access db上的工作存储过程: PARAMETERS prodCode Text ( 255 ), orderNum Text ( 255 ); SELECT Sum(FullPrice) AS Expr1 FROM Transacs WHERE (((Transacs.prodcode)=[prodCode]) AND ((Transacs.ordernum)=[orderNum]) AND

我需要从VB6.0中的程序调用Access 2007中创建的存储过程

这是右键单击->设计视图时Access db上的工作存储过程:

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=“execute SP_sumoftrancomm”&selProdcode&&selPolNo是我需要修复的。如何从那里正确调用存储过程?

您可以使用命令对象调用存储过程。有关详细信息,您可以查看

您的代码看起来像:

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

您的参数应该用引号括起来,并用逗号分隔,例如

transcommQuery = "EXECUTE SP_SumOfTransComm '@prodcode', '@orderNum';"
transcommQuery = Replace$(transcommQuery, "@prodcode", prodcode)
transcommQuery = Replace$(transcommQuery, "@orderNum", orderNum)
……但你必须担心逃避引用和其他类似的恶行


最好将
命令
对象与强类型的
参数
对象一起使用,并让OLE DB提供程序处理清除值。请参阅@MicSim的答案以获取一些示例代码。

它现在对我有效,执行以下操作:

Set TransRs = New ADODB.Recordset
Dim transcommQuery As String

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

TransRs.Open transcommQuery, db, adOpenDynamic, adLockBatchOptimistic

这看起来几乎正确,但在命令对象上调用Execute总是返回一个只读、只向前的游标。我认为您需要创建一个新的记录集对象,并通过Command对象作为源参数调用Open(由于您已经设置了ActiveConnection,所以没有连接参数)。这允许您请求特定的锁定和光标类型.Thx。我将尝试这个,因为使用Execute不起作用。我猜它应该是
TransRS.Open Cmd1,db
,因为某种原因,在执行Append时,它向存储过程添加了更多的{?},现在它有4个参数,而不是2个参数。所以我用一个直接文本命令来解决这个问题,正如我的答案所示。