アプリ版:「スタンプのみでお礼する」機能のリリースについて

accessはほぼ初心者です・・
メインの入力テーブル、県名のテーブル、地域名のテーブルを作り
フォームで県名を選んだら隣のコンボボックスに地域名を表示するようにしました
苦労の結果、ようやく名前が出るようになったのですが、テーブルに保存されません
正確に言えば、例えば福岡県を選んで博多と選択すると
博多と天神など福岡県にぶら下がっているものは覚えるけど、他の地域は覚えてない状況です
他の県を選択すると、博多等は消えてやはりその県の結果にぶら下がっているものしか覚えません
またその際、テーブルを見ると県名でなく県名のテーブルで地域コードで記録されています(福岡なら2など)
この時点で拾ってくる情報が間違っていると思っているのですが、列数や連結列等何度も見なおしていますがよくわかりません


これだけの情報で状況が理解しにくいとは想いますが、何か見直すポイント等を思いつかないかと思い投稿させてもらいました
よろしくお願いします

A 回答 (4件)

こちらなどが参考になるでしょう。


コンボボックスの連動
http://ww3.tiki.ne.jp/~kaya/Ac_tips_sample01P1.h …

3ページ目の帳票フォームの場合まで読んでください。

> またその際、テーブルを見ると県名でなく県名のテーブルで地域コードで記録されています(福岡なら2など)

コードを記録するのが普通の方法です。
件名を表示したければ、クエリなどで対応するようにします。

上記を参考にして、なお上手くいかない場合は
県名と地域名のコンボボックスのプロパティなどを
詳しく記述してください。

この回答への補足

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

補足日時:2012/03/07 13:40
    • good
    • 0
この回答へのお礼

教えていただいた方法とは違うのですが
結果的にテーブルに地域名が保存されるようになりました\(^o^)/
よくわからないままなったというのが本音ですが。。
SQLのステートメントの順番を並び替えたら(たぶん)保存されるようになったと思います

皆様の回答は大変勉強になったのですが、コードを記録するのが普通というのを教えてくださったこの回答をBAにしたいとおもいます

ありがとうございました

お礼日時:2012/03/08 10:13

地域名のテーブル内容、フォームの形式で実現方法は変わってくると思います。



地域名のテーブルの構成が
 都道府県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. …

2)の場合、以下を参照してみてください
(コンボボックスにコンボボックスを重ねる)

コンボボックスの一覧を入力時のみ制限する方法~帳票形式編~
http://www.f3.dion.ne.jp/~element/msaccess/AcTip …


※ 上記において、他テーブルに格納していく値は、
 「都道府県ID」「地域ID」を前提としていましたが、実際にはどうなのでしょうか。
 (何か違うものを格納したいような感じにも見受けられましたが)

この回答への補足

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

補足日時:2012/03/07 13:41
    • good
    • 0

失礼しました。

コンポボックスは必要です。

>博多と天神など福岡県にぶら下がっているものは覚えるけど、他の地域は覚えてない状況です
以前この件で悩みました。

フォームを開いたとき最初の県名に対して地域名が貼りつき、
次に県名を変えても貼りついた地域名は変更されない

もっと良い方法があると思いますが

苦肉の策です。県名を変える都度一旦フォームを閉じて、再び開く仕掛けで対処しています。

以下納品書フォーム(あなたが作成されたフォームでよいと思います)をもとに説明します。
フォームには[県名]と「地域名」のコンポボックスがありますね
これに 終了のラベルボックスを追加

県名を変えるとフォームを一旦閉じるので県名を控えておく「メニュー」フォームを追加します。
「メニュー」に 県名のテキストボックスを配置します。

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年もほっておくはずがない)
「accessの連結コンボについて」の回答画像2

この回答への補足

一旦閉じてまた開くのですか^^;
これはちょっと・・入力者からクレームがきそうなのでやめておきます

ちなみに手動で開いて閉じてをやってみたんですが、やはり覚えてないみたいです・・最も2番目のレコードを最初に開いたわけではないですが^^;
どうも次のレコードに移動した瞬間消えてるきがします。。

話は脱線しますが
マイクロソフトは10年何もやってない可能性もありますよねw
IMEの変換能力ときたら昔から何も変わってないですし・・

補足日時:2012/03/07 13:37
    • good
    • 0

?このフォームの目的は何ですか


?ここではコンポボックスは必要ない
?テーブルの設計に無理があるようです

県名テーブルと地域名(市町村名)テーブルはリレーション設定されていますか
リレーションシップの図を示していただくと問題点が見えてきます。

例を添付します。
T_県名の都道府県IDとT_地域の市区町村IDはオートナンバー型で主キーに設定します

T_地域の都道府県IDは長整数型の数値に設定します

※図よりT_県名とT_地域は1対Nの関係にあることが読み取れますね

※これでT_県名を開くとフォームがなくとも県名と地域が登録できます

フォームの設計は[作成]-[その他のフォーム]-[フォームウィザード]と入ってください
あとはナビしてくれます。
「accessの連結コンボについて」の回答画像1

この回答への補足

回答有り難うございます

>?このフォームの目的は何ですか
入力用フォームです
テーブルB(県名)とテーブルC(地域)から引っ張ってきた情報をテーブルAに反映させたいのです

>?ここではコンポボックスは必要ない
これがよくわからないのですが
県名を選択した後、地域名が多数出ないようにするには絞り込みの必要がありますが、コンボボックスはいらないということでしょうか?

>?テーブルの設計に無理があるようです
テーブルAの県名と地域名が反映されるようにしているだけです
コンボを使わないと素直に入りますw
コンボの設定が間違っているというとこまではわかるのですが。。


リレーションも例の様にやってみたのですが
自分が元から作っているやつはうまくいきませんが
新規で作った分は少なくともデータは残るようになりました
絞り込みをやると同じ様に消えてしまいますが。。。
ちょっとなんとかならないかあがいてみます

有り難うございました

補足日時:2012/03/06 18:41
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!