うちのカレーにはこれが入ってる!って食材ありますか?

Accessで、テーブルへのデータ入力を簡易化するための、フォームを作成しています

その中で、コンボボックスのなかから項目を入力したら
別に用意されているテーブルから
一致する項目をテキストボックスに
自動的に値を入力できるようにしたいのですが、
どのようにしたらいいのか、わかりません。

~フォームに入力する項目~
氏名、年齢、地区(コンボボックス)、地区コード、地区番号、住所、電話番号  等

~地区テーブル~
地区コード、地区、地区番号

調べてみたところ、プロパティのコントロールソースというところで、
値を持ってくるための式を作成するということでしたが・・・

実践してみたのですが、初心者ゆえ、あまりよく理解できませんでした

どうかよろしく御願いします。

A 回答 (5件)

地区(コンボボックス)の作成の時に


・元のテーブルは地区テーブルを指定
 コンボボックスの表示項目を 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関数を
使用する方法もあります
(イベントプロシジァー内にこの命令を入れる)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

教えてくださった方法で試してみたところ、
おかげさまで解決いたしました。

また、同じ処理でも複数個の方法があることを
勉強いたしました。

今後とも、Accessについて勉強を重ねていきたいです。

今回は、本当にありがとうございました。

お礼日時:2008/04/03 20:22

>~地区テーブル~


>地区コード、地区、地区番号
こういうテーブルがあるとき、他のテーブルでこのテーブルの値を参照したいときには
地区コードだけを参照キーとして取り込みます
その他のフィールドを取り込んではいけません
これはリレーショナルデータベースの約束事です
詳しくは参考書で正規化について勉強してください

ということで、
やりたいと言っておられることはやってはいけないことです
というのが回答になります

P.S.
年齢のような日々変わるものもテーブルに格納するのはお勧めできません
一度入力すれば変わることのない生年月日にしましょう
    • good
    • 0
この回答へのお礼

ご回答有難うございました。

お礼日時:2008/04/03 20:29

補足: 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
    • good
    • 0

色々と聞きたいことと言いたいことがあります。


そのやり取りを省くために、一つのサンプルを示して回答に代えます。

地区マスター:

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関数を利用されたらいいです。
    • good
    • 0
この回答へのお礼

ご回答有難うございました。

今回は、二件目にご回答いただいたかたの方法で
解決することが出来ましたが、

Husky2007さんから投稿いただいた方法につきましても
ひきつづき勉強をし、
今後に生かせればと思います。

丁寧なご回答有難うございました。

お礼日時:2008/04/03 20:26

こんにちは。



どのページを参考にして
具体的にどのような値を試してみたのか教えてください。
    • good
    • 0
この回答へのお礼

ご回答有難うございます。
二件目にご回答いただいた方の方法で解決いたしました。

参考ページは、Access初心者向けのサイトでした

お礼日時:2008/04/03 20:19

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


おすすめ情報