Excel VBA + ADO を使った Access データベースの削除(DELETE)処理の「パラメータクエリ」例を紹介します。
特定の条件に一致するレコードを安全に削除したいときに有効です。
目次
✅ やりたいこと(例)
「Users テーブルから、ID=1001 のレコードを削除する」
🧩 DELETE パラメータクエリのコード例
Sub DeleteUserRecord()
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim dbPath As String
dbPath = "C:\YourPath\YourDatabase.accdb" ' ←自分のファイルパスに変更
' 接続オブジェクト作成と接続
Set conn = New ADODB.Connection
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & dbPath & ";" & _
"Persist Security Info=False;"
' Commandオブジェクト作成
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = conn
cmd.CommandText = "DELETE FROM Users WHERE ID = ?"
cmd.CommandType = adCmdText
' パラメータの追加
cmd.Parameters.Append cmd.CreateParameter("ID", adInteger, adParamInput, , 1001)
' クエリの実行
Dim affected As Long
affected = cmd.Execute
MsgBox affected & " 件のレコードを削除しました。"
' 後処理
conn.Close
Set cmd = Nothing
Set conn = Nothing
End Sub
🔍 補足解説
| 要素 | 解説 |
|---|---|
DELETE FROM Users WHERE ID = ? | ? プレースホルダを使った削除クエリ |
cmd.CreateParameter("ID", adInteger, adParamInput, , 1001) | 削除条件の ID を指定 |
affected = cmd.Execute | 実際に削除されたレコード数を取得 |
⚠ 注意点
| 項目 | 説明 |
|---|---|
| レコードは復元できない | うっかり全件削除しないように、WHERE句必須 |
| ファイルのロックに注意 | Accessファイルが別のプログラムで開かれていると削除できないことがある |
| パラメータの順番 | ? の順番に Append する必要あり(名前は意味を持たない) |
🧪 応用:複数条件で削除
cmd.CommandText = "DELETE FROM Users WHERE ID = ? AND Name = ?"
cmd.Parameters.Append cmd.CreateParameter("ID", adInteger, adParamInput, , 1002)
cmd.Parameters.Append cmd.CreateParameter("Name", adVarWChar, adParamInput, 50, "佐藤花子")
