- ベストアンサー
ACCESS2000の帳票フォーム詳細欄でのコンボボックスについて
まずは現状から説明します。 以下のテーブルがあります。 [細分類マスタ] 細分類ID(主キー) 細分類 [品目区分マスタ] 細分類ID(主キー/細分類マスタ参照) 品目区分ID(主キー) 品目区分 [品目マスタ] 細分類ID(主キー/細分類マスタ参照) 品目区分ID(主キー/品目区分マスタ参照) 品目ID(主キー) 品目 [台帳テーブル] 台帳明細ID(主キー) 細分類ID(細分類マスタ参照) 品目区分ID(品目区分マスタ参照) 品目ID(品目マスタ参照) 数量 やった作業: 1.台帳テーブルをレコードソースとした台帳フォーム(帳票フォーム)を作成 2.台帳フォームの詳細に 細分類、品目区分、品目のコンボボックスを作成 -------------------------------------台帳フォームの詳細欄イメージ [細分類▽][品目区分▽][品目▽][数量] ------------------------------------- コントロール名:cbo_saibunrui,cbo_hinmoku_kubun,cbo_hinmoku 3.それぞれの値集合ソースに SELECT * FROM 品目区分マスタ WHERE 細分類ID=cbo_saibunrui; SELECT * FROM 品目マスタ WHERE 細分類ID=cbo_saibunrui AND 品目区分ID=cbo_hinmoku_kubun; を設定(これにより絞込み) 4.コンボボックスがフォーカス取得時に自分自身をリクエリー 現象: 2レコード以降を追加しようとすると、それより以前のコンボボックスの内容が一斉に 変ってしまう。(リクエリーがかかるからあたりまえ?) なんとか、それぞれのレコードのコンボボックスが独立して働くようにしたいのですが。 無理なら、特にこの方法にこだわるのもではありません。 要は台帳フォーム(帳票フォーム)の詳細欄で効率よく品目を選択でき、 その画面上でそれまでに選択した品目が見えていればOKです。 現在納期に追われて非常に困っています。 表現がわからないところは突っ込んでください。すぐに補足します。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
実際にフォームを作成して実験したところ…変わりますね(苦笑) ということで自分なりに改造してみたんですが、台帳テーブルを [台帳テーブル] 台帳明細ID(主キー) 細分類ID 細分類 品目区分ID 品目区分 品目ID 品目 数量 と作り直して、フォームの詳細に 台帳明細ID 細分類ID▽ 細分類 品目区分ID▽ 品目区分 品目ID▽ 品目 数量 と連結フィールドを作成します。 コンボボックスの値集合ソースは SELECT [細分類マスタ].[細分類ID], [細分類マスタ].[細分類] FROM 細分類マスタ; SELECT [品目区分マスタ].[品目区分ID], [品目区分マスタ].[品目区分] FROM 品目区分マスタ WHERE ((([品目区分マスタ].[細分類ID])=[Forms]![フォーム]![細分類ID])); SELECT [品目マスタ].[品目], [品目マスタ].[品目ID] FROM 品目マスタ WHERE ((([品目マスタ].[細分類ID])=[Forms]![フォーム]![細分類ID]) And (([品目マスタ].[品目区分ID])=[Forms]![フォーム]![品目区分ID])); それぞれ、フォーカス取得時に Me![コンボボックス名].Requery 変更時に Me![コンボボックスの右隣のフィールド名] = Me![コンボボックス名].Column(1) とすることでうまく動きました。 参考になるでしょうか?
その他の回答 (2)
- seian
- ベストアンサー率50% (16/32)
小手先の方法ですが、コンボボックスをテーブルと連結せずに、 表示はテキストボックスで行うようにしたらいかがでしょうか。 具体的に言うとドロップリストの表示用のボタンの幅だけの コンボボックスを作成して、その右側に表示用(テーブルと連結)の テキストボックスをくっつけておくのです。 例えば品目を選択する場合にはコンボボックスで品目区分でセレクトされた 内容をドロップリストとして表示し、その BeforeUpdate で 品目ID と 品目 の2つ値をテーブルと連結したテキストボックスに 代入してやることになります(品目IDの方は非表示にする)。 通常のコンボボックスの場合、表示用のボタンは表示の右側にあるのに、 この場合は左側になってしまいますがこの方が使う時にピンとくると思います。 折角IDがあるのに、台帳テーブルに細分類、品目区分、品目 と テキストデータすべてを保存することになってしまい問題が多すぎますか? いずれにせよ細分類、品目区分、品目をテキストで一覧表示したいのであれば 結局テーブルにすべてのテキストデータを持つ羽目になるような・・・・。
補足
ご回答ありがとうございます。 > 折角IDがあるのに、台帳テーブルに細分類、品目区分、品目 と > テキストデータすべてを保存することになってしまい問題が多すぎますか? 質問に挙げたのはシステムのほんの一部のテーブルでして、 既に仕様の決まったテーブルの変更をするのは手戻りが大きいのでやめておきました。 > いずれにせよ細分類、品目区分、品目をテキストで一覧表示したいのであれば > 結局テーブルにすべてのテキストデータを持つ羽目になるような・・・・。 これについてはクエリーで解決できますので問題はありません。 現に数値データしか持っていないようなテーブルが大半です。 今回の疑問は私のACCESSでの開発経験不足が一番の原因でした。 いろいろなメーリングリストなどを駆使し、睡眠時間を削り、休日を返上することで なんとか良いものができ、お客様にもお喜びいただけました。ありがとうございました。 /* 01-06-14 katuya */
- Nac
- ベストアンサー率63% (7/11)
コンボボックスの中身が一斉に変わってしまうのは コンボボックスが非連結だからです。 帳票フォームでのコントロールは連結されていないと すべてのレコードにおいて影響してしまいます。 それぞれのコンボボックスのコントロールソースを設定すれば 独立して動きますよ。
補足
ご回答ありがとうございます。 コンボボックスと台帳テーブルの連結はされています。 既存のデータをコンボボックスで表示するだけ、もしくは固定のリストからの選択なら問題ないのですが、 コンボボックスの内容をリクエリー(cbo_hinmoku.requery)した時点で一斉に替わってしまいます。 少し聴牌ってるので説明が下手でしたね。すみません。 またお願いします。
補足
やはり実装段階でテーブル設計への手戻りは痛いですね。 そのままのテーブルでは「できない」とわかっただけでも十分です。 若干の入力画面変更で何とかなりました。 おかげさまで来週いよいよ納品です。ありがとうございました。 /* 01-06-14 katuya */