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

即効テクニック

フォーム・レポート

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

(Access 97/)
■ 概要 ■
  サンプルプロシージャでは、非連結のフォームに入力されたデータを基に、住所録テーブルを更新します。


■ 手順 ■
次のテーブルを用意します。
○ 住所録テーブル
----------------------------------------------------------
フィールド名    データ型        サイズ      (AC97の場合)
----------------------------------------------------------
ID              オートナンバー
氏名            テキスト型      20文字      40バイト
会社名          テキスト型      40文字      80バイト
郵便番号        テキスト型      8文字       8バイト
住所            テキスト型      100文字     200バイト
電話番号        テキスト型      13文字      13バイト
年齢            整数型          Integer
----------------------------------------------------------

次に住所録フォームを作成しますが、フォームを作成する方法には2種類あります。

(1) オートフォームを使用し、住所録テーブルをレコードソースにした連結フォームを作成する。その後にレコードソースと各テキストボックスのコントロールソースを削除(空白に)する。
(2) フォームの新規作成から「デザイン」を選択し、住所録テーブルの全てのフィールドに対応するテキストボックスを作成する。

  どちらで作っても良いですが、オートフォームを使ったほうが簡単でしょう。


■ サンプルコード ■
データを追加するため、フォームフッターに[保存]、[クリア]、 [閉じる]という名前の3つのコマンドボタンを作成します。
各コマンドボタンのクリック時イベントには、には以下のプロシージャを記述します。


Private Sub 保存_Click()
    Dim Rst As DAO.Recordset

    Set Rst = CurrentDb.OpenRecordset("住所録テーブル", dbOpenTable)

    With Rst
        .AddNew
        .氏名 = Me.氏名
        .会社名 = Me.会社名
        .郵便番号 = Me.郵便番号
        .住所 = Me.住所
        .電話番号 = Me.電話番号
        .年齢 = Me.年齢
        .Update
    End With

    Call ClearControls

    Rst.Close
    Set Rst = Nothing

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
End Sub


■ 詳細 ■
非連結フォームのデータでテーブルを更新するためには、DAOのレコードセットを使用します。
AddNewメソッドを使用して新しいレコードを挿入し、各テキストボックスに入力された値をレコードセットに代入していきます。
最後にUpdateメソッドでレコードセットを更新し、ClearContorlsプロシージャで全てのコントロールをクリアします。

ClearControlsプロシージャは、フォームのテキストボックスを一括でクリアするためのサブルーチンです。
フォームプロシージャの中に記述して下さい。
For Each...Next構文でフォームのControlsコレクション中の全てのコントロールを参照し、コントロールがテキストボックスの場合にのみ、内容をクリアします。

■ 備考 ■
Access2000の場合、デフォルトではDAOに参照設定されていません。
Visual Basic Editor(VBE)を開き、メニューの[ツール]−[参照設定]から、Microsoft DAO 3.6 Object Libraryにチェックを入れて下さい。
その際にMicrosoft ActiveX Data Object 2.1 Libraryよりも上に、DAOのチェックを持ってきて下さい。