0
我一直在努力在不同场景中传递存储过程。目前,我正尝试通过do-while循环内部的传递查询来调用SP。我有一个名为usp_MovePending
的SP和一个传递查询qryPending
。我有一个带do-while循环的代码,在这个循环中我必须调用SP。如何在vba访问中的do-while循环内调用存储过程?
Public Sub Import()
On Error Resume Next
Dim DB As Database
Dim rs As Recordset
Dim UserStr As String
Dim ROG As Date
Dim qdf As QueryDef
Dim sql As String
UserStr = sqlfixup(CurrentUser())
Set DB = CodeDb
Set rs = DB.OpenRecordset("select * from tblQty where materialid <> 0")
DoCmd.Hourglass True
Set qdf = DB.CreateQueryDef("")
qdf.Connect = SQLConnectString
qdf.ReturnsRecords = True
Do While rs.EOF = False
With MatManagement.Transactions
.BeginTransaction
.TransactionClassID = 1
.MaterialID = rs!MaterialID
.TransactionCreateUser = CurrentUser()
.TransactionDate = Date
.CommitTransaction
If .Failure <> True Or .TransactionID <> 0 Then
CodeDb.Execute "update tblMMTransactions set transNote = '" & sqlfixup(rs.Fields("note")) & "' where transactionid = " & .TransactionID, dbSeeChanges
End If
With CurrentDb.QueryDefs("qryPending")
.sql = "exec usp_MovePending @materialid=" & rs!MaterialID & ",@SysUser=" & " '" & UserStr & "'" & "," & " @ROG=getdate()" & ",@force= 1"
.Execute
End With
End With
rs.MoveNext
Loop
rs.Close
qdf.Close
DB.Close
DoCmd.Hourglass False
End Sub
在上面的代码中,我已经加入其中,如下所示的旧代码的几行代码:
With CurrentDb.QueryDefs("qryPending")
.sql = "exec usp_MovePending @materialid=" & rs!MaterialID & ",@SysUser=" & " '" & UserStr & "'" & "," & " @ROG=getdate()" & ",@force= 1"
.Execute
End With
当调试我的代码,它检索SP的参数到直通查询。但是,我认为我的代码不是调用SP(当我自己测试SP时,它工作得很好)。我认为SQL正在等待一些返回值,但Access并没有返回任何东西。我尝试了不同的方法,但是在研究许多开发人员时推荐使用这种方法。任何人都可以指出我错过了什么吗?
是的,我曾尝试引用VB中的SP,但是我无法从表单中获取materialID,所以使用这种方法。我不确定你的意思是SP的全球化与否。我的SP在SQL中,所以你可以看到它。 – toofaced
如果将固定值添加到“qryPending”并打开查询,它是否会返回值?如果没有检查参数名称是否与SP定义的相同,Access似乎有点奇怪必须使用SP中定义的相同参数名称。 也尝试使用** dbo.usp_MovePending ** – Minty