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