【VBA】ExcelからADOでAccessのデータを削除する

ExcelからADOでAccessのデータを削除してみます。

今回はデータの物理削除ではなくYes/No型を利用した論理削除になります。

Accessファイルの概要

Accessファイルは以下のパスに置かれています。
C:\access-delete-test\MenuData.accdb

Accessにはテーブル「T_メニュー」があり、T_メニューにはメニューデータが記録されています。

テーブルは以下のフィールドで構成されています。

フィールド名 データ型
ID オートナンバー型
メニュー名 短いテキスト
値段 数値型
データ新規登録者 短いテキスト
データ新規登録日 日付/時刻型
データ更新者 短いテキスト
データ更新日 日付/時刻型
削除フラグ Yes/No型 書式はTrue/False

削除フラグがTrueになっているものを、削除データとみなします。

削除フォーム

今回はIDが7のピザをCさんが削除するとしてみます。

データベースからメニューを削除したいのでデータ削除用のフォームをシートに用意します。
シート名はDeleteDataとします。

削除したいメニューのIDとデータ削除者の名前を入力します。

A3セルに削除したいメニューのIDを入力します。
B3セルにデータ削除者を入力します。

削除ボタンを押すとデータを削除します。

データ削除のVBAコード

参照設定

ExcelからADOを利用してAccessのデータを更新するには参照設定を行う必要があります。
参照設定の方法は以下をご覧ください

VBAで参照設定を行う

参照設定を起動してMicrosoft ActiveX Data Objects 6.1 Libraryにチェックを入れます。

データを削除するコードは以下になります。

Option Explicit
Sub deleteMenu()
  
  Dim returnVal As Long
  returnVal = MsgBox("メニューを削除しますか?", vbYesNo + vbQuestion, "確認")
  If returnVal = vbNo Then Exit Sub

  Dim deleteSht As Worksheet
  Set deleteSht = ThisWorkbook.Worksheets("DeleteData")
  
  Dim adoCON As New ADODB.Connection
  adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" & _
                  "Data Source=" & "C:\access-delete-test\MenuData.accdb" & ";"
  adoCON.Open
  
  Dim id As Long
  Dim personName As String
  
  id = deleteSht.Range("A3")
  personName = deleteSht.Range("B3")
  
  Dim adoRS  As New ADODB.Recordset
  adoRS.Open "SELECT * FROM T_メニュー WHERE ID = " & id, adoCON, adOpenDynamic, adLockPessimistic
  adoRS!データ更新者 = personName
  adoRS!データ更新日 = Now()
  adoRS!削除フラグ = True
  adoRS.Update

  adoRS.Close
  adoCON.Close
  
  Set deleteSht = Nothing
  Set adoCON = Nothing
  Set adoRS = Nothing
  
  MsgBox "メニューを削除しました", vbInformation, "削除完了"
  
End Sub

データの削除テスト

削除ボタンを押した時にdeleteMenuプロシージャを呼び出すように設定します。

削除ボタンをクリックすると入力したデータを削除するかどうかメッセージボックスが表示されます。 「はい」をクリックするとデータ削除を実行します。

削除が完了するとメッセージボックスが表示されます。

Accessのデータを見るとT_メニューのピザの削除フラグがTrueになっており削除データとなっています。

Licensed under CC BY-NC-SA 4.0
最終更新 2018年8月24日 13:25
Hugo で構築されています。
テーマ StackJimmy によって設計されています。