Accessで、テーブルへのデータ入力を簡易化するための、フォームを作成しています
その中で、コンボボックスのなかから項目を入力したら
別に用意されているテーブルから
一致する項目をテキストボックスに
自動的に値を入力できるようにしたいのですが、
どのようにしたらいいのか、わかりません。
~フォームに入力する項目~
氏名、年齢、地区(コンボボックス)、地区コード、地区番号、住所、電話番号 等
~地区テーブル~
地区コード、地区、地区番号
調べてみたところ、プロパティのコントロールソースというところで、
値を持ってくるための式を作成するということでしたが・・・
実践してみたのですが、初心者ゆえ、あまりよく理解できませんでした
どうかよろしく御願いします。
No.2ベストアンサー
- 回答日時:
地区(コンボボックス)の作成の時に
・元のテーブルは地区テーブルを指定
コンボボックスの表示項目を 3つ指定
(地区、地区コード、地区番号)
とします
地区(コンボボックス)のプロパティの中で
更新前処理のところにて イベントプロシジァーを
選択して 右端の ... をクリック
開いたボックスのなかへ
Me![TX1] = Me![CB1].Column(1)
Me![TX2] = Me![CB1].Column(2)
と入力する
Me![CB1].Column(1)
とは
CB1 項目 のなかの 2番目の項目
という意味です (この場合は地区コンボボックスの
2番目の項目*地区コードということになります)
CB1 TX1 TX2 は 地区、地区コード 地区番号 のフォームでの
名前です(どんな名前でもいいですが)
各項目のプロパティにおいて1番上に出ている名前です
別の方法としては VBAの DLOOKUP関数を
使用する方法もあります
(イベントプロシジァー内にこの命令を入れる)
ご回答ありがとうございました。
教えてくださった方法で試してみたところ、
おかげさまで解決いたしました。
また、同じ処理でも複数個の方法があることを
勉強いたしました。
今後とも、Accessについて勉強を重ねていきたいです。
今回は、本当にありがとうございました。
No.5
- 回答日時:
>~地区テーブル~
>地区コード、地区、地区番号
こういうテーブルがあるとき、他のテーブルでこのテーブルの値を参照したいときには
地区コードだけを参照キーとして取り込みます
その他のフィールドを取り込んではいけません
これはリレーショナルデータベースの約束事です
詳しくは参考書で正規化について勉強してください
ということで、
やりたいと言っておられることはやってはいけないことです
というのが回答になります
P.S.
年齢のような日々変わるものもテーブルに格納するのはお勧めできません
一度入力すれば変わることのない生年月日にしましょう
No.4
- 回答日時:
補足: ADO関数でなく DLookup() を使う場合は、NO2さんのカラム情報取得がお勧めです。
Private Sub Form_Current()
地区_ID_AfterUpdate
End Sub
Private Sub 地区_ID_AfterUpdate()
If Len(Me.地区_ID & "") Then
Me.地区名 = Me.地区_ID.Column(2)
Me.地区番号 = Me.地区_ID.Column(3)
End If
End Sub
No.3
- 回答日時:
色々と聞きたいことと言いたいことがあります。
そのやり取りを省くために、一つのサンプルを示して回答に代えます。
地区マスター:
ID__地区コード__地区名__地区番号
01__E101________東地区_____10101
02__W101________西地区_____20101
顧客名簿:
ID__氏名_______年齢__地区_ID__住所______電話番号
01__鈴木 一郎____40________1__東京下町__1111-11-1111
02__中村 主水____50________2__大阪下町__2222-22-2222
ここでは、[地区マスター].[地区コード]の訂正を考慮して[ID]-[地区_ID]で連結しています。
顧客名簿_クエリ:
顧客名簿.ID__氏名_______年齢_地区コード_地区名_地区番号_住所_____電話番号
__________1__鈴木 一郎____40_E101_______東地区____10101_東京下町_1111-11-1111
__________2__中村 主水____50_W101_______西地区____20101_大阪下町__2222-22-2222
SELECT 顧客名簿.ID, 顧客名簿.氏名, 顧客名簿.年齢,
地区マスター.地区コード, 地区マスター.地区名, 地区マスター.地区番号,
顧客名簿.住所, 顧客名簿.電話番号
FROM 顧客名簿 LEFT JOIN 地区マスター
ON 顧客名簿.地区_ID = 地区マスター.ID;
このように、地区コード、地区名、地区番号は容易に参照することが出来ます。
ですから、フォーム[顧客名簿]では[地区_ID]をコンボボックスで選択すれば事足ります。
<準備>
テーブル[顧客名簿].[地区_ID]のルックアップを設定します。
値集合ソース=SELECT * FROM 地区マスター;
連結列=1
列数=4
列幅=0cm;3cm;3cm;3cm
<フォーム[顧客名簿]作成>
準備が終れば、フォーム[顧客名簿]作成します。
ID_________[_1]
氏名_______[鈴木 一郎]
年齢_______[40]
地区_ID____[E101_________] <--- コンボボックス
住所_______[東京下町_______]
電話番号___[1111-11-1111]
ですから、[地区_ID]を入力するコンボボックスは自動作成されます。
<地区名、地区番号を参照するテキストボックスの作成要領>
・非連結テキストボックス[地区名]、[地区番号]を配置。
・プロパティ[使用可能]=いいえ <---- 参照するだけだから!
・プロパティ[ロック]=はい <---- 参照するだけだから!
・表示コードを書く。
Private Sub Form_Current()
地区_ID_AfterUpdate
End Sub
Private Sub 地区_ID_AfterUpdate()
Dim lngID As Long
If Len(Me.地区_ID & "") Then
lngID = Me.地区_ID.Value
Me.地区名 = DBLookup("地区名", "地区マスター", "ID=" & lngID)
Me.地区番号 = DBLookup("地区番号", "地区マスター", "ID=" & lngID)
End If
End Sub
ここでは、Access の DLookup() ではなく3倍速で処理する ADO関数 DBLookup() を使っています。
この関数は、自作する以外にはありません。
そういうことで、一般には DLookup関数を利用されたらいいです。
ご回答有難うございました。
今回は、二件目にご回答いただいたかたの方法で
解決することが出来ましたが、
Husky2007さんから投稿いただいた方法につきましても
ひきつづき勉強をし、
今後に生かせればと思います。
丁寧なご回答有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(Microsoft Office) EXCELの1行を1枚の用紙にそれぞれ印刷したい。 3 2022/10/10 11:35
- Access(アクセス) ACSESS初心者です マンション管理をACCESSで出来ないかとチャレンジしています。 リレーショ 3 2022/10/08 11:45
- Excel(エクセル) EXCELでの複雑な複数条件について 4 2022/05/09 16:19
- Excel(エクセル) 【Excel】住所に郵便番号を付記する方法 3 2022/05/07 17:15
- Access(アクセス) Accessにインポートした複数のテーブルを表示させる方法が分かりません。 1 2023/01/30 20:22
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access VBAでクエリーのレコー...
-
ワードでの単純作業の効率化に...
-
データベースの1要素に複数デー...
-
Accessで名寄せグループの関係...
-
Access フォームのデータがテー...
-
(ACCESS)連番取得について
-
ACCESS2003 Aアクロバットを介...
-
Accessデータベースで行と列を...
-
シングルクォーテーションとダ...
-
Access クエリ このレコードセ...
-
Access2013VBA 複数のテーブル...
-
文字化け、記号の含まれるフィ...
-
ADOでレコードを閉じるタイミン...
-
複雑なinsert文の書き方について
-
ACCESS で マクロの中でフィ...
-
Access IF文でテーブルに存在し...
-
Access 既に開いているフォー...
-
Access 縦(行)のデータを横(列)...
-
Excel 2019 のピボットテーブル...
-
Oracle 2つのDate型の値の差を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access VBAでクエリーのレコー...
-
シングルクォーテーションとダ...
-
Access フォームのデータがテー...
-
Access IF文でテーブルに存在し...
-
データベースの1要素に複数デー...
-
ACCESS で マクロの中でフィ...
-
ACCESS2003 Aアクロバットを介...
-
Access 既に開いているフォー...
-
顧客IDを入力すると顧客名や住...
-
ワードでの単純作業の効率化に...
-
Access クエリ このレコードセ...
-
テーブル1 2 3 の結合
-
VBAで検索条件式の書き方教えて...
-
ワードで保存するファイル名の...
-
Accessデータベースで行と列を...
-
access フォーム間で情報が引...
-
Access レコードロックについて...
-
ACCESS 顧客データ 購入履歴...
-
別のDBからテーブルをコピーす...
-
文字化け、記号の含まれるフィ...
おすすめ情報