AccessVBA/DAO
DAOを使ったデータベース操作 †
ADOでは連結フォームのレコードソースを扱うことができません。
次の機能を持った連結フォームを作成する場合には、DAOオブジェクトを利用する必要があります。
- 連結フォームに検索機能を追加する
- 連結フォームに削除機能を追加する
- Visual Editorで[ツール] - [参照設定]
- [参照設定]ダイアログボックスで「Microsoft DAO 3.6 Object Libray」を選択
- [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オブジェクトでできること †
処理 | DAO | ADO |
移動 | 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 |
レコードを検索する方法 †
DAOのRecordsetオブジェクトではFind系のメソッドを使ってレコードを検索します。
検索位置と検索する方向によって、次の4つのメソッドを使い分けてください。
- 書式
recordset.FindFirst criteria :レコードセットの先頭から検索する recordset.FindPrevious criteria :カレントコードより前のレコードを検索する recordset.FindNext criteria :カレントコード以降のレコードを検索する recordset.FindLast criteria :レコードセットの最終から検索する recordset :開いているRecordsetオブジェクト criteria :検索条件を表す文字列
- 例
recordset.FindFirst "都道府県 = '東京都'"