非連結のフォームでデータを追加する(ADO)|Access VBA |
次のサンプルでは、非連結のフォームに入力されたデータをもとに、住所録テーブルを更新します。
テーブルとフォームは「非連結のフォームでデータを更新する(DAO)」を参照し、同じ物を用意してください。
各コマンドボックスのクリック時イベントには、以下のプロシージャを記述します。
Private Sub 保存_Click()
Dim Con As ADODB.Connection
Dim Rst As ADODB.Recordset
Set Con = CurrentProject.Connection
Set Rst = New ADODB.Recordset
Rst.Open "住所録", Con, adOpenForwardOnly, adLockPessimistic
With Rst
.AddNew
.Fields("氏名") = Me!氏名
.Fields("会社名") = Me!会社名
.Fields("郵便番号") = Me!郵便番号
.Fields("住所") = Me!住所
.Fields("電話番号") = Me!電話番号
.Fields("年齢") = Me!年齢
.Update
End With
Rst.Close
Set Rst = Nothing
Set Con = Nothing
Call ClearControls
End Sub
Private Sub クリア_Click()
Call ClearControls
End Sub
Private Sub 閉じる_Click()
DoCmd.Close acForm, "住所録", acSaveNo
End Sub
Sub ClearControls()
Dim Ctl As Control
For Each Ctl In Me.Controls
If Ctl.ControlType = acTextBox Then
Ctl = Null
End If
Next Ctl
End Sub
非連結フォームのデータでテーブルを更新するために、ADOのレコードセットを使用します。
ADOで現在使用中のmdb/accdbを参照するためには、CurrentProjectオブジェクトのConnectionプロパティを使用し、Connectionオブジェクトを生成します。
次にRecordsetオブジェクトのOpenメソッドでレコードセットを取得します。
このとき、Openメソッドの引数Sourceには[住所録]テーブル、引数ActiveConnectionにはConnectionオブジェクトのConを指定します。
今回はデータ追加処理なので、CursorTypeとLockTypeプロパティの設定が必要です。
この引数を省略すると更新できないレコードセットになるため、このように設定します。
ここから先はDAOの場合と同じ処理になります。
AddNewメソッドを使用して新しいレコードを挿入し、各テキストボックスに入力された値をレコードセットに代入していきます。
最後にUpdateメソッドでレコードセットを更新し、ClearContorlsプロシージャで全てのコントロールをクリアします。
ClearControlsプロシージャは、フォームのテキストボックスを一括でクリアするためのサブルーチンです。[住所録]フォームのフォームモージュールの中に記述して下さい。
For Each...NextステートメントでフォームのControlsコレクションの中のすべてのコントロールを参照し、コントロールがテキストボックスの場合にのみ、内容をクリアします。
ADOはデータベース操作をするためのさまざまなオブジェクトを持つライブラリです。
DAOがJETデータベースエンジンに直接接続してデータベース操作できるのに対し、ADOはAccess以外のデータベースも同じ方法で操作できるというメリットがあります。
DAOと同じ名前のオブジェクトも多く、紛らわしいかもしれません。
ヘルプやオブジェクトブラウザを参照する場合は、どちらのライブラリのオブジェクトなのかを確認しましょう。
ADOを使用するには、「Microsoft ActiveX Data Objects X.X Library(X.Xはバージョン番号)」の参照設定が必要です。
Access 2003以前のバージョンでは既定で参照設定されていますが、Access2007以降は[参照設定]ダイアログボックスで参照設定をしてください。