#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'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved