中級者のためのエクセルマクロVBA:Accessデータベースへの削除処理
流れ的には更新なのですが、ちょっと面倒くさいので後回しで先に削除処理をします。削除については、どれを?がわかればそれで終わりです。
どれを?をどう削除する?
こっからは仕様の話なので、どうでも良いのですが、商品情報を削除するには商品IDを指定しなければいけません。そのIDを条件に削除処理を行います。例えば、フォームにIDを指定して削除ボタンを押したら、そのIDの商品を削除するでも良いですし、一覧にある商品IDを選択して、削除ボタンを押すことで削除されるでも良いです。
特定する情報をいかにしてとるか?
要は削除する情報が「どれ?」かをちゃんと特定すること。が大切です。削除の処理自体はそんなに難しくありません。他の登録処理と一緒です。SQL作って、実行するだけです。
ではそんなに前置きもないのでコードです。今回は、商品のセルを選択したら、その行の商品が削除されます。間違ってボタンを押しても削除されないように確認画面を付けます。
Private Sub btnProductDelete_Click() 'On Error GoTo Err Dim productId As String Dim productName As String Dim mCon As ADODB.Connection 'データベース接続オブジェクト Dim adoRS As Object Dim sql As String Dim ret As Variant Dim msg As String ' 削除するデータを変数に入れる productId = Sheet2.Cells(Selection.Row, "A").Value productName = Sheet2.Cells(Selection.Row, "B").Value If Left(productId, 2) <> "PB" Then MsgBox "商品が選択されていません。", vbExclamation + vbOKOnly, "エラー" Exit Sub End If ' 確認する msg = "商品ID:" & productId & vbCrLf & "商品名:" & productName & vbCrLf & vbCrLf & _ "この商品を削除しますか?" ret = MsgBox(msg, vbQuestion + vbOKCancel, "商品削除") If ret = vbOK Then ' Accessへ接続する Set mCon = mdlDbUtil.initDb ' 登録するSQL文を作る sql = "DELETE FROM Product WHERE ID = '" & productId & "'" ' 実行する mCon.Execute (sql) MsgBox "削除しました。", vbInformation + vbOKOnly, "商品削除" End If Exit Sub Err: MsgBox "登録エラー", vbExclamation + vbOKOnly, "商品削除" End Sub
はい、おしまい。ちょっとだけやっていることを説明すると、処理の流れとしては・・・
削除するデータを変数に入れる。
Selectionオブジェクトを使ってます。Selectionオブジェクトは現在選択されているセルのRangeオブジェクトになるので、SelectionオブジェクトのRowプロパティを参照すると、「現在選択されているセルの行」が選択されるわけです。
選択されている行が商品行か?
Left関数を使って、変数に入れた商品IDがちゃんと商品IDか?を判定しています。ここではとりあえず、変数の最初の2文字を取得してそれが「PB」だったら商品IDとしています。
このあたりは、自分で作る時にどう判定するのか?は考えておくと良いですね。
後は、やっていることは登録と変わらないです。AccessDBへ接続して、SQLを実行した。だけです。
今日はここまで!
かしこ