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 "都道府県 = '東京都'"