HOME > 即効テクニック > Access VBA > フォーム・レポート > 非連結のフォームでデータを追加する(ADO)

非連結のフォームでデータを追加する(ADO)|Access VBA

フォーム・レポート

非連結のフォームでデータを追加する(ADO)

(Access 2000/2002/2003/2007/2010)

次のサンプルでは、非連結のフォームに入力されたデータをもとに、住所録テーブルを更新します。

テーブルとフォームは「非連結のフォームでデータを更新する(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以降は[参照設定]ダイアログボックスで参照設定をしてください。