#548 複雑な条件でレコード検索を行うには? VBA

画面に表示されているレコードの中からある条件に一致するレコードを検索しそのレコードにジャンプしたい場合、簡単な方法としてDoCmdオブジェクトの「FindRecord」メソッドを使う方法があります。

ただしこのFindRecordメソッドでは検索ができないいくつかのケースがあります。
  • 検索条件が複数フィールドに渡っている場合

    たとえば「商品コード=123」かつ「数量=999」のような条件での検索はできません。

  • 検索結果が複数フィールドにヒットしてしまう場合

    たとえばすべてのフィールドを対象に「123」を検索した場合、「商品コード=123」と「数量=123」がヒットしてしまう可能性があります(引数でカレントフィールドを指定した場合は特定フィールドだけを検索できます)。

  • 検索対象のフィールドのコントロールが使用不可となっている場合

    このメソッドはテキストボックスなどの内容をトレースするようなイメージで検索していきます。そのため検索対象のコントロールの「使用可能」プロパティが”いいえ”になっているとそのフィールドを対象とした検索ができません。

そのようなとき使えるメソッドが「SearchForRecord」です。

たとえば次の例では、カレントフォームの「商品コード」と「数量」のデータを対象に検索を行っています。この方法なら各レコードのコントロールひとつでも使用可能になっていればそこにカレントレコードを移動させることができます。

DoCmd.SearchForRecord , , , "商品コード = 'A123' AND 数量 = 13"



また、このメソッドの引数に指定できる検索条件は、DoCmd.OpenFormメソッドやDFirst関数などもでよく使われるWhere条件式の指定方法と同じです。よって次のような条件で検索することも可能です。SQL文の書き方を知っていればかなり複雑な検索も可能だと思います。

DoCmd.SearchForRecord , , , "商品コード Like '*11*' AND 数量 > 14"



参考Tips:「#497 レコード検索用テキストボックスの例」
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved