中級者のためのエクセルマクロVBA:Accessデータベースへの更新処理
お待たせしました。更新処理です。基本的な動作は新規作成や削除と何ら変わりはありません。今回の方針では変更する場合、すべての入力列を更新する方針で行います。
理由はその方が楽だからです。w
さて、もろもろ危険性はありますが、処理としては更新ということがわかれば良いので、ざっくりと以下で行きます。
・削除と同じく選択した行の値を取得して更新画面を表示する
・更新画面は登録画面と同じで、商品情報が入力された状態
・更新ボタンで更新ができる。
です。
ボタンを押したらフォームを値が入った状態で表示する
さてコードです。
まずはシート側に商品更新ボタンを作成し、そのボタンを押したら更新画面を表示させるところです。
Private Sub btnProductUpdate_Click() 'On Error GoTo Err Dim productId As String Dim productName As String Dim productPrice As String ' 登録するデータを変数に入れる productId = Sheet2.Cells(Selection.Row, "A").Value productName = Sheet2.Cells(Selection.Row, "B").Value productPrice = Sheet2.Cells(Selection.Row, "C").Value If Left(productId, 2) <> "PB" Then MsgBox "商品が選択されていません。", vbExclamation + vbOKOnly, "エラー" Exit Sub End If frmProductUpdate.txtProductId.Value = productId frmProductUpdate.txtProductName.Value = productName frmProductUpdate.txtPrice.Value = productPrice frmProductUpdate.Show End Sub
ここでは、削除処理とまずは同じで、条件を満たしていなければエラーとしています。
そうでなければ、更新処理を行うフォームオブジェクトの各コントロールに表の値を設定して、フォームの画面を表示しています。このfrmProductUpdate.txtProductId.Value = productIdという部分が値を設定している部分です。何も難しいことはしていないということを理解してほしいと思います。やっていることはただただ、
・オブジェクトを正しく頭から指定する。
・設定したい値をプロパティに代入式で代入する
これだけです。オブジェクトは日本語の「の」を「.」でつなぐのでしたね。すなわち、
「更新フォームfrmProductUpdateの商品IDテキストボックスtxtProductIdの値を変数productIdに入っている値で設定する」
が
「frmProductUpdate.txtProductId.Value = productId」
となるわけですね。
フォームのボタンを押すと更新する
次に更新処理ですね。これも簡単です。フォームの値を取得して、SQL文を作成し、実行したらそれで終わりです。接続などは共通のプロシージャを利用するのは登録や削除と同じです。
ではコードです。
Private Sub btnProductUpdate_Click() On Error GoTo Err Dim productId As String Dim productName As String Dim price As String Dim mCon As ADODB.Connection 'データベース接続オブジェクト Dim adoRS As Object Dim sql As String ' 登録するデータを変数に入れる productId = Me.txtProductId.Value productName = Me.txtProductName.Value price = Me.txtPrice.Value ' Accessへ接続する Set mCon = mdlDbUtil.initDb ' 登録するSQL文を作る sql = "UPDATE Product SET id = '" & productId & "', product_name = '" & productName & "', price = '" & price & "'" & _ "WHERE id = '" & productId & "'" ' 実行する mCon.Execute (sql) MsgBox "更新完了", vbInformation + vbOKOnly, "商品更新" Me.Hide Exit Sub Err: MsgBox "更新エラー", vbExclamation + vbOKOnly, "商品登録" End Sub
はい、こんな感じですね。
これで、更新ボタンを押すと更新し、完了するとフォームを閉じてくれます。
閉じる命令文はHideプロシージャですね。Showの反対です。
いかがでしょうか?これでDBとの基本的な連携についてはこれでおしまいです。データベースと連携することでより複雑なアプリケーションが作成できるようになります。是非皆さん一度試してみてください。
今日はここまで。
かしこ