AccessVBA/DAO

DAOを使ったデータベース操作

ADOでは連結フォームのレコードソースを扱うことができません。
次の機能を持った連結フォームを作成する場合には、DAOオブジェクトを利用する必要があります。

  • 連結フォームに検索機能を追加する
  • 連結フォームに削除機能を追加する
  • DAOを利用する前に
  1. Visual Editorで[ツール] - [参照設定]
  2. [参照設定]ダイアログボックスで「Microsoft DAO 3.6 Object Libray」を選択
  3. [OK]ボタンをクリック

DAOオブジェクトの宣言をする

Dim rs AS DAO.Recordset

連結フォームのレコードソースをもとにレコードセットを作成する

DAOのRecordsetオブジェクトにFormオブジェクトのRecordsetCloneプロパティを代入すると、
連結フォームに表示中のレコードセットコピーを取得する事ができます。

  • 書式
    Set recordset = Forms!formname.RecordsetClone
    
    recordset    :DAOのRecordsetオブジェクト
    formname     :開いているフォームの名前

  • [F_顧客]フォームのレコードソースを参照する
    Set recordset = Forms!F_顧客.RecordsetClone

連結フォームとRecordsetオブジェクトのカレントコードを同期させる

連結フォームに表示されるレコードセットと、RecordsetCloneプロパティを使っ作成したRecordsetオブジェクトとは異なるオブジェクトです。
そのため、プログラムでRecordsetオブジェクトのカレントコードを移動しても、フォームに表示されるレコードは、もとのままです。
2つのレコードセットでカレントコードを同期させるには、Bookmarkプロパティを利用します。

  • Public Sub daoMoveRecord()
      Dim rs As DAO.Recordset
      Set rs = Forms!F_顧客.RecordsetClone
      rs.MoveFirst
      For i = 0 To 4
        Debug.Print rs!顧客ID, rs!氏名
        rs.MoveNext
      Next i
      Forms!F_顧客.Bookmark = rs.Bookmark
      
      Set rs = Nothing
    End Sub

DAOのRecordsetオブジェクトでできること

処理DAOADO
移動MoveFirst,MovePreviousMoveFirst,MovePrevious
MoveNext,MoveLastMoveNext,MoveLast
編集Edit,UpdateUPdate
追加AddNew,UpdateAddNew,Update
削除DeleteDelete
検索FindFirst,FindPreviousFind
FindNext,FindLast
抽出FilterFilter
並べ替えSortSort

レコードを検索する方法

DAOのRecordsetオブジェクトではFind系のメソッドを使ってレコードを検索します。
検索位置と検索する方向によって、次の4つのメソッドを使い分けてください。

  • 書式
    recordset.FindFirst criteria     :レコードセットの先頭から検索する
    recordset.FindPrevious criteria  :カレントコードより前のレコードを検索する
    recordset.FindNext criteria      :カレントコード以降のレコードを検索する
    recordset.FindLast criteria      :レコードセットの最終から検索する
    
    recordset :開いているRecordsetオブジェクト
    criteria  :検索条件を表す文字列
  • recordset.FindFirst "都道府県 = '東京都'"