誰もがG'dayです。MS Accessクエリーカスタム関数は、フォームテキスト入力を値として受け入れます。
私は今日まで一日中この質問に対して私の頭を叩いていましたが、何か答えを見つけることができなかったので、私はあなたの助けに感謝します。
私が持っているもの:
- テキストフィールド
- 正規表現と呼ばれるカスタム関数をモジュール内で定義されたフォームのデータソース
- あるクエリを含むAccessフォーム
RegExpは文字列(テーブルから取得)とパターン(フォームから取得)の2つの値を入力として受け取ります。 RegExpはブール値を返します。ブール値はクエリ結果を消します。
この関数は完全に正常に動作しますが、これはユーザーがテキストフィールドを塗りつぶす場合にのみ当てはまります。フィールドを空白のままにすると、結果は返されません(この場合、関数は呼び出されなくなります)。 (基本的には、スペースを変換し、切り取ら先頭と末尾の取得テキストフィールドに、値のユーザータイプを、それを合計する
... AND (RegExp(tblRole.Description,Trim([Forms]![frmFindRole]![txtRegExp]))<>False) AND ...
:だからここ
は、クエリ内の特定のステートメントは次のようになります。 VBAモジュール内の正規表現に変換し、クエリ結果は、関数が返すブール値に基づいてフィルタリングされます)。
このフォームにはいくつかのコントロールがあり、それらはtxtRegExpテキストフィールドを追加する前に機能していました。今、クエリは、txtRegExpが記入されている場合にのみ結果を返し、理由はわかりません。私はより多くの小切手を追加しようとしましたが、クエリはあまりにも複雑で、成功しませんでした。
答えを作成するために追加のコードサンプルが必要な場合は、明日に提供することができます。
ありがとうございます。
P.S. Nzはお手伝いしますか?はいの場合は、どうやって使用するのですか?
RegExp関数の先頭にブレークポイントを設定して、テキストボックスが空のときに関数が入力されているかどうかを確認し、関数が返す関数をステップバイステップで実行します。あなたの関数がNULLを返し、 'NULL <> false'で終わる可能性があります。これは有効な式ではありません。 NULLを何かと比較することはできません。そのため、私たちは常に、何かがNULLではなく、何かを意味するのです。 NZの場合、控除が有効であれば、実際には次のようになります。 'AND(NZ(RegExp)tblRole.Description、Trim([Forms]![frmFindRole]![txtRegExp]))、false) AND –
@Thomasの場合、2番目のパラメータ(pattern = txtRegExp)がnullの場合、関数は "Exit Function"を返します。私はすでにそれを使用して試してみました(設定パターン= Trueの場合はIsNull(パターン);異なるブレークポイントの関数内に4つの異なるメッセージボックスを入れました)。 txtRegExpは空白です( "とその関数が呼び出されていない場合でも")。私はブレークポイントを使用してMsgBoxに比べて異なるかどうかはわかりませんが、これは私がやったことです。 –
これを修正する方法はいくつかありますクエリがどのようにトリガされるのですか?ボタンがあるのか、それとも別のイベントですか?解決策は、テキストボックスが空であれば、クエリを別のものに変更することです。あなたは –