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

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


● 準備 ●

  テーブルとフォームは「非連結のフォームでデータを更新する(DAO)」を参照
し、同じ物を用意してください。


● サンプル ●

  各コマンドボックスのクリック時イベントには、以下のプロシージャを記述
します。

Private Sub 保存_Click()

    Dim Con As New ADODB.Connection
    Dim Rst As New ADODB.Recordset
    Dim Cmd As New ADODB.Command

    Set Con = CurrentProject.Connection

    Cmd.CommandText = "Select * From 住所録テーブル"

    Set Cmd.ActiveConnection = Con

    Rst.Open Cmd, , adOpenForwardOnly, adLockPessimistic, adCmdText

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

    Call ClearControls

    Rst.Close

    Set Cmd = Nothing
    Set Rst = Nothing
    Set Con = 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


● 詳細 ●

  非連結フォームのデータでテーブルを更新するために、ADOのレコードセット
を使用します。

  ADOで現在使用中のMDBを参照するためには、CurrentProjectオブジェクトの
Connectionプロパティを使用し、Connectionオブジェクトを生成します。

  次にレコードセットを取得するための元となるSQL文を、Commandオブジェク
トのCommandTextプロパティに代入します。
  その際、CommandオブジェクトのActiveConectionを設定しておくのが重要な
ポイントです。

  次にRecordsetオブジェクトのOpenメソッドでレコードセットを取得します。
  今回はデータ追加処理ですので、CursorTypeとLockTypeプロパティに注意が
必要になります。この引数を省略することも出来ますが、その場合は更新でき
ないレコードセットになるため、今回はどちらも設定します。
  また第1引数のSourceにCommandオブジェクトを指定する場合、第2引数の
ActiveConnectionを未指定にしておかないとエラーが発生します。
  ここから先はDAOの場合と同じ処理になります。

  AddNewメソッドを使用して新しいレコードを挿入し、各テキストボックスに
入力された値をレコードセットに代入していきます。
  最後にUpdateメソッドでレコードセットを更新し、ClearContorlsプロシージャ
で全てのコントロールをクリアします。

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


● 補足説明 ●

  ADOはDAOとかなり違う部分がありますので、今までDAOを使ってきた場合には
使いにくい部分もあるでしょう。
  しかし、今後のデータアクセスはADOに集約されていくことがMicrosoftによ
り明言されていますし、何よりJetエンジン(MDB)以外のデータベースへの接
続、操作も同じ手順で可能になります。
  是非使ってみてください。

Access2000



戻る


Excel Word Access VBA! モーグ