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のデータを更新するには参照設定を行う必要があります。
参照設定の方法は以下をご覧ください
参照設定を起動して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になっており削除データとなっています。
