MS Access Tips/Sample and VBA and Blog customize etc...

フォームに独自の検索機能を実装する

以前の記事、フォームの Recordset, RecorsetClone, RecordSet.Clone の違いとは? で、フォーム上の複数レコードを更新する場合は、RecordSet.Clone か更新クエリを利用するのが圧倒的に高速だというのを実験で確認しました。

では、Recordset, RecorsetClone には出番がないのでしょうか。それぞれの動作の違いは上の記事で考察しましたが、それを理解すれば適切な使い道はあります。

例えば、更新せずに別のレコードの値を持ってくるだけなら、RecorsetClone が最適でしょう。例えば、フォームで前レコードの値を複写する関数 では、RecorsetClone を使ってます。

検索機能のように特定のレコードへ移動したいというときは、Recordsetプロパティを使うとシンプルに記述できます。今回は、Recordsetプロパティを使用した検索機能の実装例です。

FrmSearch.png

難易度:

仕様

テーブル「社員」をレコードソースとするフォーム上に、フィールド名を選択するコンボボックス「cbFieldName」、検索条件を入力するテキストボックス「txtCriteria」、3個のコマンドボタン「cmdFindFirst」「cmdFindNext」「cmdFindPrevious」があるとします。検索条件には、>=, <=, Between And, などの演算子が使えます。また、テキスト型のフィールドなら曖昧検索の * 等のワイルドカード等が使えます。

数値型の条件例
>=100
<=40 Or >=80

日付型の設定例
2009/06/15
between 2009/06/15 And 2009/07/15

テキスト型の設定例
*ABC*
ABC*

コンボボックス「cbFieldName」

値集合タイプ フィールドリスト
値集合ソース 社員

フォームモジュール

ヘルプのサンプルやWEBで公開されいてるコードですと、RecordsetCloneを使った例が多いですが、Recordsetを使った方がコードがシンプルになります。ただし、RecordsetプロパティはAC2000から実装された物なので、AC97以前のバージョンではRecordsetCloneを使うことになります。

サンプルMDB が下記からダウンロードできます。
FrmSearch_07.zip (Access 2007-2010 形式 - 25kb)
FrmSearch.zip (Access 2002-2003 形式 - 25kb)
FrmSearch_2k.zip (Access 2000 形式 - 23kb)

拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/128-c57c718a
該当の記事は見つかりませんでした。