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に
チェックを入れます。
データを削除するコードは以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
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になっており
削除データとなっています。
コメント