私はさまざまなシナリオでストアプロシージャを渡すことに取り組んでいます。現在、私はdo-whileループ内でパススルークエリ経由でSPを呼び出そうとしています。私はusp_MovePending
という名前のSPとパススルークエリqryPending
を持っています。私はSPと呼ぶ必要があるdo-whileループを持つコードを持っています。上記のコードで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
、私は以下のようにされている古いコードに数行のコードを追加していた:私は私のコードをデバッグするとき、それはパススルーするSPのパラメータを取得し
With CurrentDb.QueryDefs("qryPending")
.sql = "exec usp_MovePending @materialid=" & rs!MaterialID & ",@SysUser=" & " '" & UserStr & "'" & "," & " @ROG=getdate()" & ",@force= 1"
.Execute
End With
クエリ。しかし、私は自分のコードがSPを呼んでいないと思う(SPを単独でテストするとうまくいく)。私は、SQLはいくつかの戻り値を待っていると思うが、Accessは何も返さない。私はさまざまなアプローチを試みましたが、多くの開発者を調査してこのアプローチを使用することを推奨していました。誰も私がここで欠けているものを指摘できますか?
はい、私はVBでSPを参照しようとしたが、私はそう、このアプローチを使用したフォームからmaterialIDを得ることができることはなかったです。私はあなたがSPグローバルかどうかを確信していません。私のSPはSQLになっているので、SQLはそれを見ることができます。 – toofaced
"qryPending"に固定値を追加してクエリを開くと値が返されますか?あなたはあなたのSPが定義されているようにパラメータ名が同じであることを確認していない場合は、アクセスがSPで定義されたのと同じパラメータ名を使用することについて少し奇妙に思えます。 ** dbo.usp_MovePending **も試してみてください – Minty