まりふのひと

Recordset オブジェクトの Open メソッド

DAOでもよく理解できなかったのに、ADOでますます解らなくなった。しかも最近は使っていないのでなおさらだ。

§基礎から始める Access VBA 講座
  • 書式
    • recordset.Open Source, ActiveConnection, CursorType, LockType,option
      • recordset: 開いているRecordsetオブジェクト
      • Source: 省略可能。SQLステートメント,テーブル名,クエリ名を指定
      • ActiveConnection: 省略可能。Connectionオブジェクトまたは接続情報文字列を指定
      • CursorType: 省略可能。カーソルタイプを決めるためのCursorTypeEnum値を指定
      • LockType: 省略可能。ロック(同時実行)の種類を決めるための LockTypeEnum値を指定
      • Options:省略可能
  • CursorTypeEnum値
    • adOpenDynamic (動的カーソル)
      • ほかのユーザーによる追加、変更、削除を確認できます。Recordset 内でのすべての動作を許可します。プロバイダがブックマークをサポートしている場合は、ブックマークを利用できます。
    • adOpenForwardOnly (前方専用カーソル)
      • ほかのユーザーによる追加、変更、削除は確認できません。レコードのスクロール方向が前方向に限定されていることを除き、静的カーソルと同じ働きをします。Recordset のスクロールが 1 回だけで十分な場合は、これでパフォーマンスを向上できます。(既定値)
    • adOpenKeyset (キーセットカーソル)
      • 動的カーソルと同様のはたらきをしますが、ほかのユーザーによるレコードの追加の確認、およびほかのユーザーが削除したレコードへのアクセスはできません。ほかのユーザーが変更したデータは表示できます。常にブックマークが使用できるため、Recordset 内でのあらゆる種類の移動が可能です。
    • adOpenStatic (静的カーソル)
      • データの検索またはレポートの作成に使用するための、レコード セットの静的コピーを提供します。常にブックマークが使用できるため、Recordset 内でのあらゆる種類の移動が可能です。ほかのユーザーによる追加、変更、削除は表示されません。
  • LockTypeEnum値
    • adLockBatchOptimistic
      • 共有的バッチ更新を示します。
    • adLockOptimistic
      • レコードごとに共有的ロックをします。Update メソッドを呼び出した場合にのみ、共有的ロックを使ってそのレコードをロックします。
    • adLockPessimistic
      • レコードごとに排他ロックを行ないます。レコードの編集を開始するとロックが始まります。UpdateメソッドかCancelUpdateメソッドを実行するまで、他のユーザーはこのレコードの読み取り、編集を行なうことができません。
    • adLockReadOnly
      • 読み取り専用のレコードを示します。データの変更はできません。
    • adLockUnspecified
      • ロックタイプを指定しません。
  • Cursor Type・Lock Typeの値の組合せによるレコードセットのタイプ

No.レコードセットのタイプCursorTypeLockTypeoptions
1ダイナセット adLockOptimistic 
2スナップショットタイプadOpenStaticadLockReadOnly 
3テーブルタイプ  adCmdTableDirect
4読み取り専用 adLockReadOnly 
5 adOpenKeysetadLockOptimistic 

    1. レコードの更新・追加・削除が可能で,編集結果は,レコードセットのもとになったテーブルに反映されます。
    2. レコードセットの内容を更新することは出来ません。
    3. レコードの更新・追加・削除が可能.。seekメソッドを利用した高速検索が可能。
    4. レコードセットは,VBで更新することはできません。検索や並べ替えなど,レコードを更新する必要がない場合に利用します。
    5. 通常使われる組合せ

  • フォームに 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

データシート形式でも可能か試してみよう。