AccessVBA/DAO の変更点


*DAOを使ったデータベース操作 [#lb266724]

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

-連結フォームに検索機能を追加する
-連結フォームに削除機能を追加する

-&color(red){DAOを利用する前に};
-&color(red){DAOを利用する前に};&aname(DAO);
+Visual Editorで[ツール] - [参照設定] 
+[参照設定]ダイアログボックスで「Microsoft DAO 3.6 Object Libray」を選択
+[OK]ボタンをクリック

**DAOオブジェクトの宣言をする [#i814cfc0]

 Dim rs AS DAO.Recordset

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

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

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

**連結フォームとRecordsetオブジェクトのカレントコードを同期させる [#q458acdb]
連結フォームに表示されるレコードセットと、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オブジェクトでできること [#wf07f7cf]
|処理|DAO|ADO|h
|移動|MoveFirst,MovePrevious|MoveFirst,MovePrevious|
|~|MoveNext,MoveLast|MoveNext,MoveLast|
|編集|Edit,Update|UPdate|
|追加|AddNew,Update|AddNew,Update|
|削除|Delete|Delete|
|検索|FindFirst,FindPrevious|Find|
|~|FindNext,FindLast|~|
|抽出|Filter|Filter|
|並べ替え|Sort|Sort|

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

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

-例
 recordset.FindFirst "都道府県 = '東京都'"