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, "佐藤花子")