コンボボックスの複数条件での絞り込み †
ページ | OpenOffice.org FAQの登録ページ |
---|---|
投稿者 | 匿名 |
分類 | |
優先順位 | |
状態 | |
カテゴリー | |
投稿日 | 2011-02-11 10:43:50 (金) |
OS | Windows XP |
依存するページ | faq/4/1680 faq/6/125 |
バージョン |
メッセージ †
回答ページでは行末に「~」を付加する必要はありません |
コンボボックスの利用について教えて下さい。
faq/6/125 に記載されていたコンボボックスによるメインフォームの絞込みで、 2つのコンボボックスによる絞込みは出来たのですが、3つ目・4つ目と、抽出する条件を 追加したく、フィルター文をandで繋いでみましたが、上手くいきません。 どのような記述になるのでしょうか?
例としては、サンプル faq6_125.odbのT_売上検索1 のフォームに、第3の条件として com日付を配しました。(後程サンプルを添付させていただきます。) この場合のマクロが上手くいかずご教授いただきたい点です。
また、別途、サンプルにT_売上検索2 のフォームを作成してあるのですが、 こちらのフォームで、店名・品目のコンボボックスで絞り込んだ後、tex個数 に 個数(数字)を入力し、隣にあるコンボボックスで条件を指定して、 店名・品目・個数条件に表示されている内容をそのまま条件として NewQueryへ格納できたらと思っております。 こちらもtry中ですが、なかなか上手くいきません。 こちらについても、ご教授いただけるようでしたら、お力をお貸しいただけたらと思います。
よろしくお願いします。
クエリでの確認 †
ike@九州 (2011-02-14 08:43:42 (月))
フィルター文は特別なものではなく
クエリの WHERE 句 に相当します。
なので、クエリをデザイン表示で作成して
その SQL 文 の WHERE 句 をマクロでテキスト生成すれば良いという事になりますね。
複雑になってくると必ずクエリを作成して SQL 文を確認しましょう。
で、日付絞込みのクエリを作成すると分かりますが HSQLDB の場合SELECT * FROM "T_売上" WHERE "日付" = {D '2007-01-01' } AND "店名" ='元町店' AND "個数" > 3のようになっていて
WHERE の右側を oForm.Filter に指定すれば良いと言う事になります。
では、1月分の場合はどうしましょう?
"日付" LIKE {D '2007-01-%' } で抽出されますが、イベントのテキストの変更時に割り当てていた場合に、入力途中にエラーが発生してフォームが正常動作しなくなります。(フォームの再起動が必要になる)
その回避策に IF 文で文字数チェックを行っています。
両方の為に日付の場合だけ = ではなく LIKE を使って生成しましょう。
何日から何日までという場合はコンボボックスをもう一つ作成して Filter を以下のように生成します( "日付" BETWEEN {D '2007-01-01' } AND {D '2007-01-04' } )
取りあえずサンプルは作成しました。
重要な点
日付のコンボボックスはプロパティで
リストの内容をSQLで以下のように指定が必要ですSELECT DISTINCT(CAST("日付" AS CHAR)) FROM "T_売上"
素晴らしい回答をありがとうございます!! †
匿名 (2011-02-15 15:53:08 (火))
ike@九州様、すごいの一言です!!
実現させたかった動作が見事に処理されており、ここまで詳しくお教えいただけて
本当に感謝いたします。
日付を使用しての抽出が、こんなに前後動作も考えて作らなくてはならない事を
知らなかったので、お恥ずかしい限りです。
Queryへの格納の記述も、本当にすごいとしか言いようがありませんでした!
本当にありがとうございます。これで、一歩前進することができます。
もう一点、疑問が解決しないものがあるので、この場をお借りして質問させていただいてもよろしいでしょうか?
もう一点というのは、店名ごとに、品目・品名が異なる場合、その値を、
どのようにコンボボックスへ表示したら良いか?という内容です。
サンプルに、「T_品名」というものを作成しました。
このテーブルを元に、「F_品名」を作成し、同様に3つのコンボボックスを配置しました。
店名から順にコンボボックスを選択した時、それぞれ該当するものだけを、
次のコンボボックスへ表示したい場合、2つ目までは出来たのですが、3つ目以降(品名)の条件を指定する記述がどうも上手くいかず、
表示されないか、エラーとなってしまうの連続です。
大変無知で申し訳ないのですが、こちらに関しても、お教えいただけますでしょうか?
よろしくお願いします。
前回の修正も含めています †
ike@九州 (2011-02-16 09:40:06 (水))
F_品名の補足及び
日付の入力チェックについて良い方法がありましたので、他のエラー部分含め修正しています。日付チェックに正規表現を使う事で今までの苦労がうそのように無くなりました。
色々な日付チェックに応用できます。テキストの変更時のイベント例Sub inputdate(oEvent) sDate = oEvent.Source.getText() Dim aOptions As New com.sun.star.util.SearchOptions oTextSearch = CreateUnoService("com.sun.star.util.TextSearch") aOptions.algorithmType = com.sun.star.util.SearchAlgorithms.REGEXP aOptions.searchFlag = com.sun.star.util.SearchFlags.REG_EXTENDED 'YYYY-MM-DD or YYYY-MM-% の入力指定 aOptions.searchString = "[0-9]{4}-[0-9]{2}-([0-9]{2}|%)" oTextSearch.setOptions(aOptions) IF oTextSearch.searchForward(sDate,0,0).subRegExpressions Then 〜処理〜 End IF End Sub
度々すみません。ありがとございます! †
匿名 (2011-02-18 09:08:14 (金))
ike@九州様
お礼のご挨拶が遅れまして大変申し訳ありません。
毎回、素晴らしい回答ありがとうございます。かなり理想のものに仕上げる事ができそうで嬉しいです。
再記述いただいた日付に関するマクロ、これすごいです!!
日付を使った他のパターンにも活用できそうですね!!
今回のご指導で、本当に目から鱗が沢山でした。
またつまづく事があると思いますので、その際はまたお力をお貸しいただけたら幸いです。
この度は、ありがとうございました!