DAOでもよく理解できなかったのに、ADOでますます解らなくなった。しかも最近は使っていないのでなおさらだ。
§基礎から始める Access VBA 講座
- 書式
- recordset.Open Source, ActiveConnection, CursorType, LockType,option
- CursorTypeEnum値
- adOpenDynamic (動的カーソル)
- ほかのユーザーによる追加、変更、削除を確認できます。Recordset 内でのすべての動作を許可します。プロバイダがブックマークをサポートしている場合は、ブックマークを利用できます。
- adOpenForwardOnly (前方専用カーソル)
- ほかのユーザーによる追加、変更、削除は確認できません。レコードのスクロール方向が前方向に限定されていることを除き、静的カーソルと同じ働きをします。Recordset のスクロールが 1 回だけで十分な場合は、これでパフォーマンスを向上できます。(既定値)
- adOpenKeyset (キーセットカーソル)
- 動的カーソルと同様のはたらきをしますが、ほかのユーザーによるレコードの追加の確認、およびほかのユーザーが削除したレコードへのアクセスはできません。ほかのユーザーが変更したデータは表示できます。常にブックマークが使用できるため、Recordset 内でのあらゆる種類の移動が可能です。
- adOpenStatic (静的カーソル)
- データの検索またはレポートの作成に使用するための、レコード セットの静的コピーを提供します。常にブックマークが使用できるため、Recordset 内でのあらゆる種類の移動が可能です。ほかのユーザーによる追加、変更、削除は表示されません。
- adOpenDynamic (動的カーソル)
- LockTypeEnum値
- adLockBatchOptimistic
- 共有的バッチ更新を示します。
- adLockOptimistic
- レコードごとに共有的ロックをします。Update メソッドを呼び出した場合にのみ、共有的ロックを使ってそのレコードをロックします。
- adLockPessimistic
- レコードごとに排他ロックを行ないます。レコードの編集を開始するとロックが始まります。UpdateメソッドかCancelUpdateメソッドを実行するまで、他のユーザーはこのレコードの読み取り、編集を行なうことができません。
- adLockReadOnly
- 読み取り専用のレコードを示します。データの変更はできません。
- adLockUnspecified
- ロックタイプを指定しません。
- adLockBatchOptimistic
- Cursor Type・Lock Typeの値の組合せによるレコードセットのタイプ
No. | レコードセットのタイプ | CursorType | LockType | options |
---|---|---|---|---|
1 | ダイナセット | adLockOptimistic | ||
2 | スナップショットタイプ | adOpenStatic | adLockReadOnly | |
3 | テーブルタイプ | adCmdTableDirect | ||
4 | 読み取り専用 | adLockReadOnly | ||
5 | adOpenKeyset | adLockOptimistic |
-
- レコードの更新・追加・削除が可能で,編集結果は,レコードセットのもとになったテーブルに反映されます。
- レコードセットの内容を更新することは出来ません。
- レコードの更新・追加・削除が可能.。seekメソッドを利用した高速検索が可能。
- レコードセットは,VBで更新することはできません。検索や並べ替えなど,レコードを更新する必要がない場合に利用します。
- 通常使われる組合せ
- フォームに Recordset オブジェクトのレコードを表示する (サンプル)
作成した ADO の Recordset オブジェクトを、フォームの Recordset プロパティに代入して,フォームに表示することができます。ただし,VB で編集可能ですが,フォーム上で編集することはできません。
右のフォームは非連結フォームです。テキストボックスの名前はラベルの標題と同じです。フォームのLoadイベントで、これらのテキストボックスのControlSource を設定し、ADOで作成したレコードセットオブジェクトをフォームのRecordset プロパティに代入すると、フォームにADOのRecordsetオブジェクトのレコード表示することができます。もちろん、移動ボタンで移動できます。ただし、レコードの編集は出来ません。
-
- サンプルコード
Private Sub Form_Load() Dim CNN As ADODB.Connection Dim RST As ADODB.Recordset Dim SQL As String SQL = "SELECT 会員コード, 家族コード, 氏名,カナ, 生年月日 FROM T_家族" '接続 Set CNN = CurrentProject.Connection 'レコードセットを取得 Set RST = New ADODB.Recordset RST.Open "T_家族", CNN, adOpenKeyset, adLockOptimistic 'テキストボックスのControlSourceの設定 Me.会員コード.ControlSource = "会員コード" Me.家族コード.ControlSource = "家族コード" Me.氏名.ControlSource = "氏名" Me.カナ.ControlSource = "カナ" Me.生年月日.ControlSource = "生年月日" 'コードセットオブジェクトの代入 Set Me.Recordset = RST '終了 RST.Close: Set RST = Nothing CNN.Close: Set CNN = Nothing End Sub
データシート形式でも可能か試してみよう。