中級者のためのエクセルマクロVBA:Accessデータベースへの登録処理
フォームの内容をデータベースに登録する
続きです。今度は登録ボタンを押したら、Accessへ登録フォームの内容を登録します。さっそくやってみましょう。VBEでフォームを作成したと思いますが、ここで追加した「登録ボタンを」右クリックして「コードの表示」を選択します。
すると、このボタンをクリックした時に実行されるプロシージャが自動で作成されます。
Private Sub btnProductRegist_Click() End Sub
この「btnProductRegist」というのがオブジェクトですよね。もうわかると思いますが、ボタンもオブジェクトです。フォームオブジェクトにこのボタンオブジェクトが引っ付いている形ですね。
では、後はやることはなんでしょうか?
という流れをそのままプログラムで書くだけです。コメントにしますかね。
Private Sub btnProductRegist_Click() ' - 登録するデータを変数に入れる ' - Accessへ接続する ' - 登録するSQL文を作る ' - 実行する End Sub
後は必要な変数ですね。まずはAccessに接続するためのオブジェクトを格納する変数、それからフォームの内容を格納する変数などが必要ですね。それらを宣言します。
Private Sub btnProductRegist_Click() Dim productId As String Dim productName As String Dim price As String Dim mCon As ADODB.Connection 'データベース接続オブジェクト Dim sql As String ' - 登録するデータを変数に入れる ' - Accessへ接続する ' - 登録するSQL文を作る ' - 実行する End Sub
はい、できました。後はコメント通りにプログラムを書くだけです。登録するデータを変数に入れるには、フォームオブジェクトを指定してそのValueプロパティを参照すれば良いのです。
Private Sub btnProductRegist_Click() Dim productId As String Dim productName As String Dim price As String Dim mCon As ADODB.Connection 'データベース接続オブジェクト Dim sql As String ' 登録するデータを変数に入れる productId = Me.txtProductId.Value productName = Me.txtProductName.Value price = Me.txtPrice.Value ' - Accessへ接続する ' - 登録するSQL文を作る ' - 実行する End Sub
こんな感じです。「はて?Me?( ゚д゚)?」となりそうですが、Meは「自分自身」という意味です。英語のままですね。このプログラムは先ほどに書いた通り、フォームオブジェクトのコードを書く場所に書いています。ですので、ここでMeとするとそれはつまりこのフォームオブジェクトつまりbtnProductRegistそのものをさしていることになるわけです。Meがいやならちゃんと「btnProductRegist.txtProductId.Value」と書いても構いません。これで「btnProductRegistの商品IDテキストボックスのオブジェクトtxtProductIdの値、つまりValueプロパティを参照し、その値を変数productIdに代入、つまり格納することができます。
次にデータベースへの接続ですが、これも以前ブログで書いた標準モジュールから呼び出すだけです。つまり
' Accessへ接続する Set mCon = mdlDbUtil.initDb
ですね。後は、SQL文で登録用のInsert文を作成し、実行したらAccessへ登録できるようになります。
Private Sub btnProductRegist_Click() Dim productId As String Dim productName As String Dim price As String Dim mCon As ADODB.Connection 'データベース接続オブジェクト Dim sql As String ' 登録するデータを変数に入れる productId = Me.txtProductId.Value productName = Me.txtProductName.Value price = Me.txtPrice.Value ' Accessへ接続する Set mCon = mdlDbUtil.initDb ' 登録するSQL文を作る sql = "INSERT INTO Product(id, product_name, price) " & _ "VALUES('" & productId & "', '" & productName & "', '" & price & "')" ' 実行する mCon.Execute sql End Sub
これで登録ができるのですが、これでは、ボタンを押しても何も言われません。ただ、登録されるだけなので、もう少し使う人にやさしくしてみます。
- 登録完了のメッセージを表示する
- フォームをクリアする
などを入れてみます。SQLの実行した結果が問題なければ登録がOKですので、On Error Gotoを使います。その結果がこれ。
Private Sub btnProductRegist_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 = "INSERT INTO Product(id, product_name, price) " & _ "VALUES('" & productId & "', '" & productName & "', '" & price & "')" ' 実行する mCon.Execute (sql) MsgBox "登録完了", vbInformation + vbOKOnly, "商品登録" Me.txtProductId.Value = "" Me.txtProductName.Value = "" Me.txtPrice.Value = "" Exit Sub Err: MsgBox "登録エラー", vbExclamation + vbOKOnly, "商品登録" End Sub
これで完成です。色々やっているように見えますが、やっていることは、先ほど書いた通り・・・
だけです。
今日はここまで!
かしこ