ACCESS VBA ADOでレコードを削除する方法

ADOでレコードを削除する方法

ACCESSではクエリを使ってレコードの追加・削除・更新が可能です。

一方で、VBAを利用すればさらに柔軟なレコード操作を行うことができます。
ACCESSでレコードの追加・削除・更新を行う際に使用するのがADOです。

今回は、ADOでレコードを削除する方法をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。

ADOでレコードを削除する構文

ADOでレコードを削除する際は。Deleteメソッドを利用します。

利用方法は以下の通りです。

レコードセット.Delete

レコードセットの部分には実際のレコードセット名を入力します。
これを実行することで、該当レコードセットのカレントレコード(1レコード)が削除されます。

レコードセット全体を削除するわけではないのでご注意ください。

以下、ADOを含めた解説をします。

ADOとは

ADO(ActiveX Data Objects)とはマイクロソフトが提供する、データベースを操作するための様々オブジェクトの集合体です。
ADOを使うことでデータベースの操作が可能です。

ACCESSはもともとクエリ等のデータベースを操作する独自オブジェクトを用意していますが、ADOを使うことで条件分岐やループを含めたより柔軟なデータベースの追加、更新、削除が可能です。

ADOとよく似たものに、DAO(Data Access Object)があります。
ACCESSのデータベース接続に特化している点が特長で、ADO登場以前から使われています。

ただ、今後VBAプログラミングを行うならADOを使っておくほうが良いでしょう。
ADOとDAOはプログラミングの方法が若干異なりますので、混在すると複雑になります。

ADOの使用準備

ADOを使用するためにはACCESS側で、ADOの利用に必要なライブラリファイルを追加する必要があります。
といっても、操作は簡単です。

ACCESSを起動させたら、ALT + F11キーでVBE(Visual Basic Editor)を表示します。

VBEの画面で、ツールから参照設定を選択します。

参照設定の画面が表示されますので、Microsoft ActiveX Data Objects X.X Libraryを選択して、OKを押します。
X.Xの部分はバージョンです。できるだけ数字の大きいもの(新しいもの)を選択してください。

これで、事前準備は完了です。

VBAでのADOを使ったレコード削除例

それではVBAでレコードを削除するプロシージャを作成しましょう。
今回は以下のコードを作成しました。



Public Sub test_delete(uriage_id As Long)

'変数の宣言
Dim cnn As ADODB.Connection
Dim rst1 As ADODB.Recordset

'変数にADOオブジェクトを代入
Set cnn = CurrentProject.Connection
Set rst1 = New ADODB.Recordset
rst1.CursorLocation = adUseClient

'レコードセットを取得
rst1.Open "TRN_売上明細2", cnn, adOpenKeyset, adLockOptimistic

'該当売上IDのレコードのみを抽出
rst1.Filter = "売上ID = " & uriage_id

'売上明細がない場合
If rst1.recordcount = 0 Then

    Exit Sub

'売上明細がある場合
Else

    Do Until rst1.EOF
    
        rst1.Delete
        rst1.MoveNext

    Loop

End If

'終了処理
rst1.Close: Set rst1 = Nothing
cnn.Close: Set cnn = Nothing

End Sub

TRN_売上明細2というテーブルのレコードを削除するプロシージャです。

削除する際、引数に売上IDを渡し、該当の売上IDのレコードだけを削除しています。

以下、パートごとに説明します。


'変数の宣言
Dim cnn As ADODB.Connection
Dim rst1 As ADODB.Recordset

'変数にADOオブジェクトを代入
Set cnn = CurrentProject.Connection
Set rst1 = New ADODB.Recordset
rst1.CursorLocation = adUseClient

最初に変数の宣言と、変数にADOのオブジェクトを代入しています。
ここはこのままのコードを毎回利用できます。


 'レコードセットを取得
 rst1.Open "TRN_売上明細2", cnn, adOpenKeyset, adLockOptimistic

次に、宣言したrst1というレコードセットに、TRN_売上明細2のテーブルを格納しています。


 '該当売上IDのレコードのみを抽出
 rst1.Filter = "売上ID = " & uriage_id

次に、Filterプロパティを使って、引数で渡されたuriage_idと同じ売上IDのレコードだけを抽出します。


'売上明細がない場合
If rst1.recordcount = 0 Then

    Exit Sub

'売上明細がある場合
Else

    Do Until rst1.EOF
    
        rst1.Delete
        rst1.MoveNext

    Loop

End If

そしていよいよレコード削除処理です。

その前に、If文でレコード数が0の場合は処理をスキップするようにしてあります。

Elseで売上明細がある場合は、rst1.Deleteでレコードを削除し、rst1.MoveNextで次のレコードに移動してループ処理を繰り返します。
rst1.EOF、つまりTRN_売上明細で該当売上IDのレコードの最後まで処理を行ったらループから脱出します。


'終了処理
rst1.Close: Set rst1 = Nothing
cnn.Close: Set cnn = Nothing

最後にADOのクローズ処理を行って終了です。

以上、ADOでレコードを削除する方法をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。