#596 Docmdでストアドプロシージャを実行する方法 VBA

通常、AccessでSQL Server上のストアドプロシージャを実行する場合、ADOのいくつかのオブジェクトやメソッド等を組み合わせて実行することが多いと思います。一方、Accessプロジェクト(.adp)においては、そのAccessデータベースファイル内のひとつのクエリオブジェクトとしてSQL Server上のストアドプロシージャが存在しているかのようなイメージになりますので、DoCmdオブジェクトのメソッドによってそのストアドプロシージャを開くことができます。

それには、DoCmdオブジェクトの「OpenStoredProcedure」メソッドを使います。

ストアドプロシージャがSELECT文を使ってレコードを返すような内容の場合には、「DoCmd.OpenQuery」といった命令と同様に、データシート形式でその内容が表示(”開く”)されますが、Accessで言うところのいわゆる”アクションクエリ”のような処理内容であれば、その処理をSQL Server上で”実行”させることができます。


次の例では、「uspProcedureName」という名前のストアドプロシージャを実行しています。

なお、レコードを返さないストアドプロシージャの場合、処理完了後に「ストアドプロシージャは実行されましたが、レコードは返されませんでした。」というエラー(エラー番号:8008)が発生します。そのエラーメッセージ表示を「DoCmd.SetWarnings False」で抑止するとともに、そのエラーは無視して次へ進むようなエラー処理を行っています。

  On Error GoTo Err_Handler

  With DoCmd
    .SetWarnings False
    .OpenStoredProcedure "dbo.uspProcedureName"
    .SetWarnings True
  End With

Exit_Here:
  Exit Sub

Err_Handler:
  Select Case Err.Number
    Case 8008
      Resume Next
    Case Else
      MsgBox Err.Description, vbOKOnly + vbCritical
  End Select
  Resume Exit_Here

| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします
 

Copyright © T'sWare All rights reserved