2017-03-03 20 views
0

私はさまざまなシナリオでストアプロシージャを渡すことに取り組んでいます。現在、私は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は何も返さない。私はさまざまなアプローチを試みましたが、多くの開発者を調査してこのアプローチを使用することを推奨していました。誰も私がここで欠けているものを指摘できますか?

答えて

0

SQLではなくVBでSPを参照しようとしましたか?

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になっているので、SQLはそれを見ることができます。 – toofaced

+0

"qryPending"に固定値を追加してクエリを開くと値が返されますか?あなたはあなたのSPが定義されているようにパラメータ名が同じであることを確認していない場合は、アクセスがSPで定義されたのと同じパラメータ名を使用することについて少し奇妙に思えます。 ** dbo.usp_MovePending **も試してみてください – Minty

関連する問題