コンボボックスによる絞込みについて †
ページ | OpenOffice.org FAQの登録ページ |
---|---|
投稿者 | J |
分類 | |
優先順位 | |
状態 | |
カテゴリー | |
投稿日 | 2011-01-17 15:35:45 (月) |
OS | Const |
依存するページ | faq/4/1680 |
バージョン |
メッセージ †
回答ページでは行末に「~」を付加する必要はありません |
「複数のテーブルからちょっとづつレコードを選択して、 別のテーブルへ転記したい」のページを参考にさせていただき、 複数のコンボボックスを使用した絞込みをするフォームを作成中です。
faq4_1680_7.odb を参考にマクロを作成してみて、とても理想的なものに なりつつありますが、少し変更したい箇所がありますので、その点について 教えていただけたらと思います。
faq4_1680_7.odb ←で作られたコンボボックスで、「NAME」にあたる部分を「雇用区分」(正社員/パート)とし、 「shape」にあたる部分は「所属」(複数の支店名データ)として、「雇用区分」と「所属」で選択した条件で データを抽出して、サブフォームへ表示したいのですが、どうしても上手く行きません。
状況としましては、「雇用区分」コンボで正社員を選択して、次に「所属」コンボで、○△支店を選択した時には、 それぞれのコンボボックスに表示されている値で絞り込んでもらいたいのですが、 「所属」に属する、全ての「雇用区分」のデータが出てきてしまいます。 (○△支店に属する、正社員・パートの全てのデータが出てきてしまう。)
これを、「雇用区分」and「所属」の条件で絞り込めるようにするには、faq4_1680_7.odbのマクロを、 どこをどのように修正したら可能となるでしょうか??
上手く説明が出来なくて申し訳ありません。 ご理解いただけましたら、お知恵を拝借させていただきたいと思います。
宜しくお願いします。
サブフォームのプロパティー †
M.Kamataki (2011-01-17 20:59:13 (月))
つまり faq4_1680_7.odb でラベルが「形状・寸法」(名前「lblshape」)欄のコンボボックス(名前「Mcombo2」)を選んだら、その値に応じてサブフォーム(名前「SubForm」)の内容も絞り込みたい、ということですよね。
faq4_1680_7.odb の場合は、下図のように名前「SubForm」のプロパティーを開き、「データ」タブの「リンク元」に「全材料テーブル結合ビュー」の「shape」フィールド、「リンク先」に「材料表」テーブルの「shape」フィールドを指定します。リンクは「リンク元」欄の右端の「...」ボタンをクリックして表示される「リンクフィールド」ダイアログボックスで設定できます(可能なら複数フィールドも)。
フォームウィザードなら、「4.フィールドの結合」ステップでできる設定なので、faq4_1680_7.odb の場合は、わざと外してあるのかもしれません。
これだけで、「形状・寸法」欄のコンボボックスで絞り込みができます。マクロをいじる必要はないはずです。
ただし、Jさんが作成のフォームにそのままマッチするかどうかは、Jさん自身の判断でお願いします。テーブル名、フィールド名など具体的な明示がないので、まったくわかりませんので。
ご回答ありがとうございます †
J (2011-01-19 15:59:56 (水))
お教えいただいた方法試してみました。
こちらだと、「shape」の値のみで絞込みは出来るのですが、「NAME」と「shape」の両方の値を反映した
絞込みにすることが出来ないような気がするのですが…。
私のやりかたが悪いのかもしれません。
今は2つのコンボを検索条件にしていますが、今後、検索条件が増える可能性があるので、
増えた時にも、複数のコンボの値に対応できるマクロをにしたいと思っております。
例えばですが、
Sub select2(oEvent)
Dim oForm
oForm = oEvent.Source.getModel().getParent()
oForm.Filter = """shape""='" & oEvent.Source.getText() & "'"
oForm.ApplyFilter = True
oForm.reload()
End Sub
の記述の部分で、Filterの対象を複数のコンボボックスにする場合は、どのような記述になりますでしょうか?
簡単な事かもしれませんが、ACCESSのの記述と異なるため、行き詰っております。
あと、コンボボックスで選択した値を、作成したボタンをクリックして、まとめてクリアしたい(元の未選択状態に戻す)場合は、
どのような記述が入るのでしょうか?
度々で申し訳ございませんが、お教え下さい。
テーブルの内容によります †
M.Kamataki (2011-01-20 00:22:28 (木))
わたしが回答したのは、あくまでも faq4_1680_7.odb の場合の例です。メインフォームの「全材料テーブル結合ビュー」とサブフォームの「材料表」テーブルとで一致するのは、「shape」フィールドだけですから、『「NAME」と「shape」の両方の値を反映』というのは、あり得ない話です。
ひとつ誤解があると思う点があります。ご提示のselect2マクロですが、これはサブフォームの「材料表」テーブルを絞り込んでいるのではなく、メインフォームの「全材料テーブル結合ビュー」を絞り込んでいます。この動作は理解されていますか。つまり、『「NAME」と「shape」の両方の値を反映した絞込み』は、「全材料テーブル結合ビュー」に対して働いているということです。
これで、今回のご質問は、サブフォーム側のテーブルを絞り込みたいということですから、ご提示のselect2マクロでサブフォーム側のテーブルを絞り込みたい、というのは誤解があるということが、おわかりかと思います。
このようなフォーム設計は、テーブル内容がわからないと食い違うばかりです。わたしが理解できるのは、目的は「従業員の管理」で、メインフォーム側のテーブルには、「雇用区分」「所属」などのフィールドがあるというところまでです。仮に以下のようなテーブルだとします。
ID 雇用区分 所属 1 正社員 〇〇支店 2 正社員 ○△支店 3 パート 〇〇支店 4 パート ○△支店 サブフォーム側のテーブルは以下のようなものが考えられます。
ID 名前 雇用区分 所属 1 あああ パート ○△支店 2 いいい 正社員 〇〇支店 3 ううう 正社員 〇〇支店 4 えええ 正社員 ○△支店 5 おおお パート 〇〇支店 このようなテーブル構成で、サブフォーム側の「フォームの属性」ダイアログボックスの「データ」タブで「リンク先」「リンク元」に両テーブルの「雇用区分」「所属」フィールドを選びます。これで、メインフォームの「雇用区分」で「正社員」、「所属」で「○△支店」を選べば、サブフォームには「えええ」さんが表示されると思います。
ボタンのアクション †
M.Kamataki (2011-01-20 00:32:34 (木))
>作成したボタンをクリックして、まとめてクリアしたい(元の未選択状態に戻す)場合
これは簡単です。ボタンを設置したら、ボタンのプロパティーを表示して「全般」タブのアクション欄で「リセットフォーム」か「データ項目の取り消し」を選べば良いと思います。マクロを組む必要はありません。
ご迷惑をおかけして申し訳ございません †
J (2011-01-20 16:32:39 (木))
的外れな質問に、ご丁寧にお答えいただきありがとうございます。
感謝いたします。
サブフォームの絞込みについては理解いたしました。
ありがとうございます。
プロパティーのアクション欄にも、こんな便利な機能があったのですね。
知りませんでした。ありがとうございます。
サブフォーム側の絞込みについては、ご教授いただいた内容で実現可能でしたが、
仮に、テーブルのフィールド内容が、「名前」,「雇用区分」,「所属」のもので、
それを元にしたフォーム(サブフォーム無し)を作った場合、
『「雇用区分」と「所属」の両方の値を反映した絞込み』をメインフォーム上で
実現させるには、マクロ無しでも可能なのですか??
無知で申し訳ありません。
追加 †
J (2011-01-20 16:38:06 (木))
仮に、テーブルのフィールド内容が、「名前」,「雇用区分」,「所属」のもので、
それを元にしたフォーム(サブフォーム無し)を作った場合、
『「雇用区分」と「所属」の両方の値を反映した絞込み』をメインフォーム上で
実現させるには、マクロ無しでも可能なのですか??
↑メインフォームへ、コンボボックスを配して絞込みした場合です。
コンボボックスを使う場合はマクロ必須です †
M.Kamataki (2011-01-21 00:47:28 (金))
>実現させるには、マクロ無しでも可能なのですか??
残念ながら、マクロでしか実現できません。メインフォーム上のテーブルの絞り込みはマクロ、サブフォーム側のテーブルはマクロでなくても絞り込み可能、というのが今回のご質問の結論になりませんか。
関連質問として、faq/5/10「内容が変化するリストボックスの設置方法」(これは絞り込みの例ではありませんが)もご覧ください。faq/5/10で紹介しているIssue(課題)が修正されれば、マクロを組まなくても実現できるようになるかもしれません。
本当はサンプルを提示していただくのが良いのですが †
ike@九州 (2011-01-21 09:51:01 (金))
サンプルを添付していただけるのが一番の近道なのです。
データは架空の10件程度あれば十分ですし…フォームの現状設計が不明だと行き違いが生まれます
マクロは一切記述してなくても構いません。
スクリーンショットでコレとコレで絞り込みたいとあれば、一緒に皆で考える事ができますし。
仮に、直ぐに回答が付かなくても
それは未だ
どなたも回答を見つけられていない場合とか時間が取れていない場合ですので…
簡単なサンプルですが、過去のサンプルデータを元にして
メインフォーム上での二つの条件での絞込みですフィルター文は条件が幾つになっても and を使って付加していくだけです
"フィールド1" = 'A' and "フィールド2" = 'B' and "フィールド3" = 'C'
ボタンのアクションで訂正 †
M.Kamataki (2011-01-21 23:47:48 (金))
ボタンのアクションには、フィルタリングの解除にあたる機能はありませんね。「リセットフォーム」でコンボボックの内容はクリアできますが、フィルタは解除できません。ike@九州さんのサンプルのように、コンボボックの内容のクリアとフィルタの解除部分もマクロで書いておかないといけないです。