プロが教えるわが家の防犯対策術!

お世話になります。

タイトルとして、「クエリフォームからのレコード追加」とすべきか
「フォーム上でのテーブル参照」とすべきか迷うところなのですが


仕入マスタ(ID、品番、仕入日、仕入数)
商品マスタ(ID、品番、商品名)

という二つのマスタと、
品番でリレーションして「仕入マスタのフィールド(from仕入マスタ)+商品名(from商品マスタ)」を出すだけの単純なクエリがあります。

今、仕入マスタに新規レコードをフォームから追加する際、
品番を入れたら商品マスタから商品名が参照され表示される、というフォームを作成したいのですが、どうしたら実現可能でしょうか。
(絶対やりかたがあると思ったのですが、うまく探せず質問させていただきます)

当初、新規レコード追加時には、品名を表示させようとしていなかったため、普通に「仕入マスタのフォーム」で「新規」ボタンに下記プロシージャを登録していたのですが。。
「仕入マスタのフォーム」を「仕入クエリのフォーム」に変更して、下記プロシージャを少々修正するだけで実現できるでしょうか。
(素人考えでいくつか試してみたのですが、この場合★の部分に何を指定すればいいのかわかりません。)

Private Sub 新規_Click()

Me.AllowEdits = False
Me.AllowAdditions = True
DoCmd.GoToRecord acDataForm, "仕入マスタ", acNewRec '★

End Sub



わかりにくい説明で申し訳ございません。
何卒お力添え宜しくお願い致します。

A 回答 (1件)

> 仕入マスタに新規レコードをフォームから追加する際、


> 品番を入れたら商品マスタから商品名が参照され表示される、というフォーム

以下は、追加の時だけ表示するものではなく、常に表示されるものになります。
(商品マスタの品番には、重複がないものとします)


「仕入マスタのフォーム」が既にあるようですので、「品番」の横にでもコンボボックスを追加します。
ラベル部分は要らないと思うので、ラベルは削除しておきます。
コンボボックス名を「cbx品番」としたとします。

プロパティで以下を変更していきます。
コントロールソース: 品番
列数: 2
列幅: 0cm;4cm  (1列目を非表示に、2列目の幅は適当に)
値集合ソース: SELECT 品番, 商品名 FROM 商品マスタ;
  (並び順があるのなら追加で指定します)
連結列: 1
タブストップ: いいえ


これにより、「品番」テキストボックスの値を変えると、コンボボックスの表示も変わります。
また、コンボボックスを変更すると、「品番」テキストボックスの値が変わります。

新規ボタンが、「仕入マスタのフォーム」にあるのなら、以下のような書き方でいけると思います。


Private Sub 新規_Click()
  Me.AllowEdits = True
  Me.AllowAdditions = True
  DoCmd.GoToRecord , , acNewRec
End Sub

Private Sub Form_Current()
  If (Not Me.NewRecord) Then
    If (Me.AllowEdits) Then Me.AllowEdits = False
    If (Me.AllowAdditions) Then Me.AllowAdditions = False
  End If
End Sub


※ 新規ボタンを押すまでは、編集/追加できないようにする、という前提で。
※ 新規ボタン押したけど、何もせずに他へ移動しても大丈夫なように。
  (レコード移動時に新規でなければ、Falseへ、重複設定を避けるように True の時のみ)

※ 新規の時のみコンボボックスを表示するのなら、上記タイミングで Visible を設定すればよいと思います。

この回答への補足

>30246kikuさま
いつもいつもありがとうございます(><)

ところでこのフォームのレコードソースは
「仕入マスタ」でしょうか それとも
「仕入クエリ」でしょうか。
宜しければお教えください。

補足日時:2009/12/01 15:39
    • good
    • 0
この回答へのお礼

>30246kikuさま

ありがとうございました。
「仕入マスタ」でできました。
本当にいつもありがとうございます。
助かります。

お礼日時:2009/12/01 17:05

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

関連するカテゴリからQ&Aを探す