サンプルプロシージャでは、非連結のフォームに入力されたデータを基に、
住所録テーブルを更新します。
● 準備 ●
テーブルとフォームは「非連結のフォームでデータを更新する(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)以外のデータベースへの接
続、操作も同じ手順で可能になります。
是非使ってみてください。
|