2017-03-03 73 views
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並沒有返回任何東西。我嘗試了不同的方法,但是在研究許多開發人員時推薦使用這種方法。任何人都可以指出我錯過了什麼嗎?

回答

0

您是否嘗試過在VB中引用SP而不是SQL?

With CurrentDb.QueryDefs("qryPending") 
      .sql = "exec " & usp_MovePending & " @materialid=" & rs!MaterialID & ",@SysUser=" & " '" & UserStr & "'" & "," & " @ROG=getdate()" & ",@force= 1" 
      .Execute 
End With 

這會給你什麼結果?

SP是SQL可以看到的全局變量嗎?你可以在訪問查詢構建器中輕鬆地將它調用到字段中嗎?或者它只能在程序中看到VB代碼?

+0

是的,我曾嘗試引用VB中的SP,但是我無法從表單中獲取materialID,所以使用這種方法。我不確定你的意思是SP的全球化與否。我的SP在SQL中,所以你可以看到它。 – toofaced

+0

如果將固定值添加到「qryPending」並打開查詢,它是否會返回值?如果沒有檢查參數名稱是否與SP定義的相同,Access似乎有點奇怪必須使用SP中定義的相同參數名稱。 也嘗試使用** dbo.usp_MovePending ** – Minty