- ベストアンサー
アクセス2003検索で空欄入力をOKにする方法
- アクセス2003での検索条件入力時のエラーについて、解決方法をご教示ください。
- 検索条件やキーワードが空欄の場合にエラーポップアップを表示する方法について教えてください。
- アクセス2003の検索コマンドを使用して、検索条件を選ばずにキーワードを入力する方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No2の一部を載せると、 '(1) If Not IsNull(Me!コンボ2) And Not IsNull(Me!テキスト2) Then Me.Filter = "" & Me![コンボ1] & " Like '" & "*" & Me![テキスト1] & "*" & "' AND " & Me![コンボ2] & " Like'" & "*" & Me![テキスト2] & "*" & "'" Me.FilterOn = True Exit Sub End If '(2)この場合、コンボ1とテキスト2の組合せをしても問題ないならば '問題があれば MsgBox "検索不能" としてExit Sub の前にこれを入れ、あとは削除 If IsNull(Me!コンボ2) And Not IsNull(Me!テキスト2) Then 'コンボ1とテキスト1、およびコンボ1とテキスト2の組合せでANDで結ぶ場合 Me.Filter = "" & Me![コンボ1] & " Like '" & "*" & Me![テキスト1] & "*" & "' AND " & Me![コンボ1] & " Like'" & "*" & Me![テキスト2] & "*" & "'" 'またはORで結んでテキスト1とテキスト2のどちらかを含む場合。普通はこちらかも。 'Me.Filter = "" & Me![コンボ1] & " Like '" & "*" & Me![テキスト1] & "*" & "' OR " & Me![コンボ1] & " Like'" & "*" & Me![テキスト2] & "*" & "'" Me.FilterOn = True Exit Sub End If '以下省略 '(3) ここは(2)と同様に複雑。検索、フィルタをしても問題ない組合せを考える If Not IsNull(Me!コンボ2) And IsNull(Me!テキスト2) Then Me.Filter = "条件を設定" Me.FilterOn = True Exit Sub End If '(4) この場合はコンボ1とテキスト1の組合せのみの条件設定。中身は省略 If IsNull(Me!コンボ2) And IsNull(Me!テキスト2) Then Me.Filter = "条件を設定" Me.FilterOn = True Exit Sub End If
その他の回答 (2)
- piroin654
- ベストアンサー率75% (692/917)
お礼欄にあります、 >(3)の検索条件を選ばすの件 >そうですか。時間と暇ですか。 >本当は、これを実現したいのです。しかし、 >すぐに運用をと要求されているので、一旦差し置きます。 については、No1で申し上げたようなことですが、 何故?といわれれば、簡単に言いますと、四つのコントロールが Nullであるか、そうではないかの組合せは、 2の4乗通り すなわち、16通りの組合せがあるからです。さらに、 これらの個々の条件を積(AND)にするのか、和(OR)に するのかによってさらに条件が複雑になり、組合せも膨大に なるのです。 これと同等のことを二つのテキストボックスでのフィルタで 実現しようと思えば、少なからず考え込むのでは、と思います。 コンピュータはプログラム通りにしか動かないのです。 コンボ1とテキスト1をNull禁止にすれば、 組合せは、積(AND)ならば、(XはNullです) 1 2 3 4 コンボ1 ○ ○ ○ ○ テキスト1 ○ ○ ○ ○ コンボ2 ○ X ○ X テキスト2 ○ ○ X X の四つの組合せのみです。これらの組合せを フィルタのためのWHERE句をかけばいいのです。 すなわち、わかりやすくしようと思えば、 Xのところは条件からはずせばいいのです。 組合せ別に、たとえば、条件はコンボとテキストの 関係が分からないので書いていませんが、以下のように。 Private Sub コマンド0_Click() Me.FilterOn = False '検索に進む前に最初に入力状況をチェック If IsNull(Me!コンボ1) Then MsgBox "検索条件1の選択をしてください" '処理を中断します。 Exit Sub End If If IsNull(Me!テキスト1) Then MsgBox "検索キーワード1を入力してください" '処理を中断します。 Exit Sub End If '検索とフィルタ '(1) If Not IsNull(Me!コンボ2) And Not IsNull(Me!テキスト2) Then Me.Filter = "条件を設定" Me.FilterOn = True Exit Sub End If '(2) If IsNull(Me!コンボ2) And Not IsNull(Me!テキスト2) Then Me.Filter = "条件を設定" Me.FilterOn = True Exit Sub End If '(3) If Not IsNull(Me!コンボ2) And IsNull(Me!テキスト2) Then Me.Filter = "条件を設定" Me.FilterOn = True Exit Sub End If '(4) If IsNull(Me!コンボ2) And Not IsNull(Me!テキスト2) Then Me.Filter = "条件を設定" Me.FilterOn = True Exit Sub End If End Sub のようにします。条件によっては中の条件をいくつか くっつけることで短くはできますが、内容がわからないので このようにしておきます。
- piroin654
- ベストアンサー率75% (692/917)
(1) コンボ1とテキスト1への入力は必須とするのですか。 もし、そうならば、たとえばボタンクリックのイベントで 検索しフィルタをかけるならば、 Private Sub ボタン0_Click() If IsNull(Me!コンボ1) Then MsgBox "検索条件1を選択してください" Exit Sub End If If IsNull(Me!テキスト1) Then MsgBox "検索キーワード1に入力してください" Exit Sub End If 以降、変数の宣言や検索、フィルタなどの記述 ・ ・ ・ のように、最初に記述しておき、入力待つようにします。 (2) >本当なら、どちらかでも空欄になってもエラーが出ないようにしたい。 二つのコンボボックスと二つのテキストボックスの どのような組合せでフィルタをかけたいのか、そこを 明確にしないと、後出しで「実はこうなのです」と 言っていると、肝心な回答がつかなくなります。 「列」とはフィールドを指すのでは。フィールドとは テーブルのフィールド、あるいは帳票タイプのフォーム ならばデザインビューにしたときに表示されるレコードを 表示するテキストボックスなど、では。 >列をテキストにしてみるとエラーが出てしまうのです。 この場合のテキストとはどれを指すのか分からないので 何とも言えません。 (3) >本当なら、検索条件なんか選ばず、検索キーワード >を2つくらい入力して抽出したい。 これは、コード量がどのくらいになるのかわかりませんが、 出来ないことはないにしても、時間と暇があれば、 のことになります。これもどのようなデータをどのように 抽出をしたいのか細部にわたり情報が必要になります。 これは、質問の趣旨から離れているのでここでは言及 しません。 (4) goo以外にもありますが、以下に http://faq.okwave.jp/EokpControl?&site=guidePC&tid=103115&event=FE0006 あるように、OKWaveが主催で、gooなどの提携先からログインして行なわれた Q&AはOKWaveのサーバーで管理され、それぞれの提携先にサーバーのデータが 再配分されるようになっています。 以上ですが、(2)の前半についてが主要なことなので、 そのあたりはどうですか。
お礼
回答、ありがとうございます。 (1)の「検索条件1」「検索キーワード1」を空欄にしたらの件 そうでしたか。最初にIF文を入れるのですね。Me.filterの後に入れてました。 (4)のOKWAVEに載ってしまう件 なんだか勝手に載っているようで、気味が悪かった。 これをやめてくれ、gooだけにしてくれとか訴えることはできないのでしょうか? あっちゃこっちゃで面倒。 (3)の検索条件を選ばすの件 そうですか。時間と暇ですか。 本当は、これを実現したいのです。しかし、すぐに運用をと要求されているので、一旦差し置きます。 (2)のどちらかを空欄にしてもの件 人間はファジイなので、これの処理を行えれば良いのかなと思っています。 これについては、先のbin-chanさんからいただいたのを試行錯誤しながら行っています。 ご回答してくださった内容と合わせ、もう少し研究させてください。そのうえで改めてご質問します。 次の段階として、抽出したデータでグラフとか集計を要求されてきています。 よろしくお願いいたします。
お礼
回答、ありがとうございます。 この回答で、他に回答が出ないと判断し、ベストアンサーとして選ばせていただきました。 bin-chanさん、piroin654さんらの回答は、家ではなかなか見れませんが、会社のPCでは見ています。 また、ただ単にマネするだけではなく、教えてくださったものからさらに応用ができるように、そのVBA(SQL)文を解読しています。 よって、自分のものにするにはちょっと時間がかかります。しかし、必ずや実現させていきます。 何通りにも設定しないといけないのは、費用対効果の面から、あまり得策ではないですね。 おつきあい、本当にありがとうございました。