Microsoft Access 掲示板

BuildCriteria関数について

7 コメント
views
4 フォロー

以前の投稿

以前おたずねして、しばらく時間をおいて実装していたのですがうまくいかず、
時間を取って確認しようと後回しになっていた件についておたずねします。。スミマセン。

組み合わせの検索で、文字列である「伝票NO」を検索する件です。
下記コードを教えていただき、実装しました。

BuildCriteria("伝票NO", dbText, "" & Replace(Me.txt伝票NO, vbCrLf, " And ") & "")

DoCmd.OpenForm "F伝票", acNormal, "", Mid(strFilter, Len(" AND ") + 1), , acNormal

結果、うまく検索ができないのですが、ちなみに

Replace(Me.txt伝票NO, vbCrLf, " And ") 
の部分をイミディエイトウィンドウで確認したら
伝票NO="001" And 伝票NO="002" And 伝票NO="003"
となっています。

ということは、
DoCmd.OpenForm "F伝票", acNormal, "", 伝票NO="001" And 伝票NO="002" And 伝票NO="003", acNormal
になっている?

直すべき部分を午前中考えていましたが、うまく行きません…
宜しければお力をお貸しください。

cerophan
作成: 2020/10/31 (土) 11:16:11
最終更新: 2020/10/31 (土) 12:00:08
通報 ...
1
cerophan 2020/10/31 (土) 11:45:14 0029a@1c915

ちなみに、1つの伝票番号のみだと検索ができます。複数入れると何も検索できません。

2
伝票NO="001" And 伝票NO="002" And 伝票NO="003"

というような条件になると、伝票番号が001かつ002かつ003のレコードを抽出という意味になりますが、それに該当する伝票はないですよね。(一つの伝票には一つの伝票番号しかないので)

伝票番号が001または002または003のレコードを抽出ということがご希望のことだと思いますので、イミディエイトウィンドウの結果が下記のようになるようにコードを修正しましょう。

伝票NO="001" Or 伝票NO="002" Or 伝票NO="003"

ちなみに、In演算子を使って下記の式でも上記と同じ結果になりますので、下記のようになるようなコードでもOKです。

伝票NO In ("001","002","003")
4
cerophan 2020/10/31 (土) 22:39:19 0029a@1c915 >> 2

早速試し、上記の件についてはうまく行くことを確認いたしました!感謝です。

しかし、当初の他の条件と重ね合わせる部分がうまくいきませんでした。
以下コードで確認してみると

Debug.Print Mid(strFilter, Len(" AND ") + 1)

顧客ID = 123 AND 担当ID = 23 AND 伝票NO="001" Or 伝票NO="002" Or 伝票NO="003"

とイミディエイトウィンドウに表示され、伝票NOの3つしか表示されません。

顧客と担当で絞ったときはうまく表示されます。
度々申し訳ございませんが、ご教示宜しくお願いいたします。

6
顧客ID = 123 AND 担当ID = 23 AND 伝票NO="001" Or 伝票NO="002" Or 伝票NO="003"

ANDとORではANDの方が優先順位が高いので上の式だと下記のように評価されます。

(顧客ID = 123 AND 担当ID = 23 AND 伝票NO="001") Or 伝票NO="002" Or 伝票NO="003"

演算子の優先順位 | Microsoft Docs

伝票NO の OR を先に評価させたい場合は()で囲むようにします。

顧客ID = 123 AND 担当ID = 23 AND (伝票NO="001" Or 伝票NO="002" Or 伝票NO="003")
7
cerophan 2020/11/01 (日) 10:03:59 f1ed8@f7cb8 >> 4

ありがとうございます!式を修正し、うまく動くようになりました。

3
cerophan 2020/10/31 (土) 18:29:41 f1ed8@73413

なるほど!ありがとうございます!
後ほど試してみます!ありがとうございました😊

5
cerophan 2020/10/31 (土) 22:40:23 0029a@1c915

表示順が前後されてしまいましたが、試してみた結果新たに生まれた問題点を上の4に記載しております。。
申し訳ございませんが、ご確認をお願いいたします。