• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:accessの連結コンボについて)

accessの連結コンボについて

このQ&Aのポイント
  • 初心者向けに作成したaccessの連結コンボボックスで県名を選ぶと隣のコンボボックスに地域名が表示されるが、選択した地域が保存されない問題に直面している
  • 県名と地域名を格納するテーブルがあり、フォームで県名を選んだ際に地域名を表示しているが、他の地域が保存されず、また地域名ではなく地域コードが保存されている
  • 何度も列数や連結列を確認したが、間違った情報が取得されているかどうかがわからない

質問者が選んだベストアンサー

  • ベストアンサー
  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.3

こちらなどが参考になるでしょう。 コンボボックスの連動 http://ww3.tiki.ne.jp/~kaya/Ac_tips_sample01P1.html 3ページ目の帳票フォームの場合まで読んでください。 > またその際、テーブルを見ると県名でなく県名のテーブルで地域コードで記録されています(福岡なら2など) コードを記録するのが普通の方法です。 件名を表示したければ、クエリなどで対応するようにします。 上記を参考にして、なお上手くいかない場合は 県名と地域名のコンボボックスのプロパティなどを 詳しく記述してください。

9tree
質問者

お礼

教えていただいた方法とは違うのですが 結果的にテーブルに地域名が保存されるようになりました\(^o^)/ よくわからないままなったというのが本音ですが。。 SQLのステートメントの順番を並び替えたら(たぶん)保存されるようになったと思います 皆様の回答は大変勉強になったのですが、コードを記録するのが普通というのを教えてくださったこの回答をBAにしたいとおもいます ありがとうございました

9tree
質問者

補足

コードを記録するのが普通・・・目から鱗です^^; 現在県名はそのまま、地域がコードで記録出来ているので両方コードで記録するようにいじってみます ちょっとあがいてみます。。

その他の回答 (3)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.4

地域名のテーブル内容、フォームの形式で実現方法は変わってくると思います。 地域名のテーブルの構成が  都道府県ID, 地域ID, 地域名 だとした場合 1)都道府県IDと地域IDで主キー  都道府県ID, 地域ID, 地域名  1      1   札幌  1      2   旭川  1      3   帯広  2      1   青森  2      2   八戸 2)地域IDが主キー  都道府県ID, 地域ID, 地域名  1      1   札幌  1      2   旭川  1      3   帯広  2      4   青森  2      5   八戸 「コンボ県」と「コンボ地域」があったとして、 「コンボ県」の連結値が 都道府県ID と仮定します。 ・検索用に作ったとか、連結していない場合  (上記1)2)区別なく以下で実現できると思います) 「コンボ地域」値集合ソースに SELECT 地域ID, 都道府県ID, 地域名 FROM 地域名テーブル WHERE IIF(IsNull([コンボ県]),True,都道府県ID=[コンボ県]); 列数は 3 で、連結値が 地域ID となるようにします。(上記では連結列 1) 列幅を 0cm;0cm;3cm とすると地域名だけが表示されます。 以下のイベントで処理を記述します。 Private Sub コンボ県_AfterUpdate()   Me.コンボ地域 = Null   Me.コンボ地域.SetFocus End Sub Private Sub コンボ地域_Enter()   Me.コンボ地域.Requery End Sub Private Sub コンボ地域_GotFocus()   Me.コンボ地域.Dropdown End Sub Private Sub コンボ地域_AfterUpdate()   If (Not IsNull(Me.コンボ地域)) Then     If (IsNull(Me.コンボ県)) Then       Me.コンボ県 = Me.コンボ地域.Column(1)       Me.コンボ地域.Requery     End If   End If End Sub 「コンボ県」が変更されたら、「コンボ地域」を未選択にし、フォーカスを強制的に「コンボ地域」へ移動します。 「コンボ地域」ではフォーカスが得られる時に再クエリしておいて、ドロップダウン表示(不要なら記述しない)に。 「コンボ地域」が変更された時、「コンボ県」が選択されていなかったら設定&自分の再クエリ 「コンボ県」が選択されていない場合、「コンボ地域」では全て表示しましょう、という動きとなってます。 以下は、「コンボ県」「コンボ地域」が連結されていた場合で、表示形式により実現の仕方が変わってきます。 「コンボ県」のコントロールソースは、「都道府県ID」 「コンボ地域」のコントロールソースは、「地域ID」 とした前提となっています。 ・フォーム単票形式では上記1)2)区別なく以下で実現できると思います 上記イベントでの記述に以下を追加します。 Private Sub Form_Current()   Me.コンボ地域.Requery End Sub Private Sub Form_Undo(Cancel As Integer)   Me.コンボ県 = Me.コンボ県.OldValue   Me.コンボ地域.Requery End Sub 「レコード移動時」に「コンボ地域」を再クエリします。 キャンセルされたら、「コンボ県」を元の値に戻して「コンボ地域」を再クエリ ・フォーム帳票形式では、「コンボ地域」部分にコントロールを重ねることをします 1)の場合、以下を参照してみてください (コンボボックスにテキストボックスを重ねる) 帳票フォームの複数コンボボックスで絞り込み http://hatenachips.blog34.fc2.com/blog-entry-73.html 2)の場合、以下を参照してみてください (コンボボックスにコンボボックスを重ねる) コンボボックスの一覧を入力時のみ制限する方法~帳票形式編~ http://www.f3.dion.ne.jp/~element/msaccess/AcTipsFrmHowToLimitComboListWhenInputOnly.html ※ 上記において、他テーブルに格納していく値は、  「都道府県ID」「地域ID」を前提としていましたが、実際にはどうなのでしょうか。  (何か違うものを格納したいような感じにも見受けられましたが)

9tree
質問者

補足

>「都道府県ID」「地域ID」を前提としていましたが、実際にはどうなのでしょうか。 実際に県名を地域名をテーブルにダイレクトに記録したかったのですが、下のアンサーででも出てるようにコードを記録するのが一般的みたいですね^^; 上記も参考にしてちょっとやってみようかと思います

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.2

失礼しました。コンポボックスは必要です。 >博多と天神など福岡県にぶら下がっているものは覚えるけど、他の地域は覚えてない状況です 以前この件で悩みました。 フォームを開いたとき最初の県名に対して地域名が貼りつき、 次に県名を変えても貼りついた地域名は変更されない もっと良い方法があると思いますが 苦肉の策です。県名を変える都度一旦フォームを閉じて、再び開く仕掛けで対処しています。 以下納品書フォーム(あなたが作成されたフォームでよいと思います)をもとに説明します。 フォームには[県名]と「地域名」のコンポボックスがありますね これに 終了のラベルボックスを追加 県名を変えるとフォームを一旦閉じるので県名を控えておく「メニュー」フォームを追加します。 「メニュー」に 県名のテキストボックスを配置します。 VBAは大丈夫ですね メニューフォームに次のようにコーディングします。 Private Sub Form_Activate() If 県名 > 0 Then DoCmd.OpenForm "納品書" End Sub 納品書フォームのコーディング Private Sub Form_Load() 県名 = Forms!メニュー!県名 End Sub Private Sub 県名_Change() Forms!メニュー!県名 = 県名 DoCmd.Close End Sub Private Sub 終了_Click() Forms!メニュー!県名 = 0 DoCmd.Close End Sub この件2000年頃(ACCESS2000)に気づきましたが、ACCESS2010になっても同じ現象です。 きっと何かちょっとしたことで解決すると思いますが… (MICROSOFTが12年もほっておくはずがない)

9tree
質問者

補足

一旦閉じてまた開くのですか^^; これはちょっと・・入力者からクレームがきそうなのでやめておきます ちなみに手動で開いて閉じてをやってみたんですが、やはり覚えてないみたいです・・最も2番目のレコードを最初に開いたわけではないですが^^; どうも次のレコードに移動した瞬間消えてるきがします。。 話は脱線しますが マイクロソフトは10年何もやってない可能性もありますよねw IMEの変換能力ときたら昔から何も変わってないですし・・

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.1

?このフォームの目的は何ですか ?ここではコンポボックスは必要ない ?テーブルの設計に無理があるようです 県名テーブルと地域名(市町村名)テーブルはリレーション設定されていますか リレーションシップの図を示していただくと問題点が見えてきます。 例を添付します。 T_県名の都道府県IDとT_地域の市区町村IDはオートナンバー型で主キーに設定します T_地域の都道府県IDは長整数型の数値に設定します ※図よりT_県名とT_地域は1対Nの関係にあることが読み取れますね ※これでT_県名を開くとフォームがなくとも県名と地域が登録できます フォームの設計は[作成]-[その他のフォーム]-[フォームウィザード]と入ってください あとはナビしてくれます。

9tree
質問者

補足

回答有り難うございます >?このフォームの目的は何ですか 入力用フォームです テーブルB(県名)とテーブルC(地域)から引っ張ってきた情報をテーブルAに反映させたいのです >?ここではコンポボックスは必要ない これがよくわからないのですが 県名を選択した後、地域名が多数出ないようにするには絞り込みの必要がありますが、コンボボックスはいらないということでしょうか? >?テーブルの設計に無理があるようです テーブルAの県名と地域名が反映されるようにしているだけです コンボを使わないと素直に入りますw コンボの設定が間違っているというとこまではわかるのですが。。 リレーションも例の様にやってみたのですが 自分が元から作っているやつはうまくいきませんが 新規で作った分は少なくともデータは残るようになりました 絞り込みをやると同じ様に消えてしまいますが。。。 ちょっとなんとかならないかあがいてみます 有り難うございました

専門家に質問してみよう