こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アクセスでフォームとサブフォームのリンクについて

アクセスを勉強初めて10日経過したシロウトものです。
今顧客管理データベースを作成しています。いろいろ学んで来ましたが、従業員のメンテフォーム作成でつまずいています。
社員No 配属 従業員名 のデーブルからフォーム、サブフォームを作成しました。フォームで入力し、サブフォームで従業員の一覧ができるようにしたいのです。ウィザード通りに作成するとサブフォームではフォームにある社員Noの行しか現れません。何かの見本では、ズラーと社員一覧になっており、サブフォームのどこかをクリックすると上のフォームの画面がサブフォームと連動して切り替わります。この仕組みがどうなっているのか、どうか教えて下さい。よろしくお願いします。

投稿日時 - 2008-10-17 01:57:25

QNo.4407514

すぐに回答ほしいです

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

失礼しました。
アクセスをはじめたばかりでいらっしゃるのを忘れていました。

これは、「コードビルド」を選択して記述します。VBAといわれるプログラム言語です。
どこに書いてもいいのですが、ここではIDという名前のテキストボックスがあって、これをダブルクリックするとそのレコードを親フォームに表示する、という風に動作させようということで、書いたコードです。

1 Private Sub ID_DblClick(Cancel As Integer)
2 Dim TargetID As Long
3 TargetID = Me![ID]
4 Me.Parent![ID].SetFocus
5 DoCmd.FindRecord TargetID
6 End Sub

以下、一行ずつ解説しますので、ヘルプなども参照しながら応用してみてください。

1はいいですね。あるコントロール(テキストボックスなどの総称)のプロパティ-イベント-ダブルクリック時-コード で開くと、自動的にこの行が生成されます。この場合は、IDというコントロールのダブルクリックイベントで走るコードだよ、という意味の名前です。

2。変数を宣言します。

3。Meというのは、今の場合で言えば、現在、選択しているレコードです。現在選択しているレコードの、IDというコントロールの値を参照するときに、Me![ID] と書きます。

4。親レコードのテキストボックスIDにフォーカスを移します。フォーカスされた場所というのは、この場合、点滅しているカーソルのあるところです。ダブルクリックするのはサブフォームのコントロールですから、この時点では、サブフォームにフォーカスされています。
サブフォームから、親フォームのコントロールを示すときに、Me.Parent![コントロール名] と書くのです。
今は、フォーカスをそのコントロールに移したいので(次の行を実行させる準備)、 Me.Parent![コントロール名].SetFocus と書きます。

5.フォーカスのある項目が、変数TargetID の内容と同じレコードを探します。

ここでは、IDという名のコントロールを仮定しましたが、多分これを、社員Noに読み替えていただければよいかな?
ポイントは、5行目の DoCmd.FindRecord です。その前は、これを意図どおりに実行させる準備です。
ヘルプや本をご覧になる際に、FindRecord から攻略してみてください。

投稿日時 - 2008-10-19 00:28:45

お礼

ありがとうございます!できました!感動です。丁寧に教えて頂きありがとうございました。
実は「もういいかな・・・」とあきらめていたところでした。
ほんとうに感謝します。他にも応用ができそうです。

投稿日時 - 2008-10-19 01:14:32

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

>サブフォームのどこかをクリックすると上のフォームの画面がサブフォームと連動して切り替わります.

動作確認していないのですが、間違っていたらごめん。

Private Sub ID_DblClick(Cancel As Integer)
Dim TargetID As Long
TargetID = Me![ID]
Me.Parent![ID].SetFocus
DoCmd.FindRecord TargetID
End Sub

仮にIDという名前の欄があるとしました。
ここをダブルクリックすると、親フォームがそのIDを持つレコードに飛びます(飛ぶはず・・・・・・)。

なお、データーシートフォームは、表計算ソフトの表みたいに見えるフォーム。帳票フォームは、好きなデザインで、複数のレコードを下に羅列していくフォームです。

投稿日時 - 2008-10-18 16:08:31

お礼

回答ありがとうございます。
アクセスを勉強して間もない人間なので大変恐縮ですが可能でしたらもう少し教えてください。
上の構文をプロパティのダブルクリックのところにIDをそれぞれの名前に変えて入力すればいいのでしょうか??
それともマクロビルドかコードビルドですか???
簡単なマクロは覚えました。値の代入れやレコード、コントロールの移動くらいです・・・。

投稿日時 - 2008-10-18 17:06:55

ANo.3

>実はこれはあるプロの方が作ったフリーソフトにあった請求・見積ソフトで使われていたひとつのフォー>ムであり、そのデザインを見まねで勉強しながら作成している途中なのです。

これはダイジェストを帳票で表示させて
その中の一つを選ぶと詳細フォームを表示させるという
よくやるインタフェースの一つです

別フォームでやることの方が多いのですが
メイン・サブの形でこしらえてあるだけです

そういうわけですから形はメイン・サブでもリンクをさせてはいけません

投稿日時 - 2008-10-18 16:02:21

ANo.2

テーブルが一つしかないのにメイン・サブフォームを使うの?

メインサブフォームを使うのは
親子関係のテーブル、見出しと詳細の関係のテーブル、1対1の関係のテーブル
等2つ以上のテーブルを関係づけて表示させたい場合です

本当はなにがしたいの?

投稿日時 - 2008-10-17 13:05:22

お礼

回答ありがとうございます。外出していたので返答が遅くなりました。回答いただいていたのにすみません。
1つのテーブルで入力用フォームとして単純に利用することでなんら問題はありません。ただ今回やりたかったのは、新規の社員をどんどん入力していく(メインフォーム側)のと別に、既存の社員の修正を下のサブフォームの一覧から見てカーソルを持っていってクリックすると、上のメインフォームがその社員に切り替わり、修正が出来るような仕組みです。実はこれはあるプロの方が作ったフリーソフトにあった請求・見積ソフトで使われていたひとつのフォームであり、そのデザインを見まねで勉強しながら作成している途中なのです。そんな重要なことでないのは理解しているのですが・・・。

投稿日時 - 2008-10-18 10:21:26

ANo.1

サブフォームではフォームにある社員Noの行しか現れません。
何かの見本では、ズラーと社員一覧になっており、
-------------------------------------------------------
ウイザードで 「社員No」を結合キーにしたからですね
したがって 当該の社員No だけしかでません
例えば当該の配属組織の社員Noをズラーと出したければ
配属を 結合キーにします
-------------------------------------------------------
また
サブフォーム側の規定のビューは「単票」ではなくて
「帳票フォーム」で。
--------------------------------------------------------
ただし基本的なことを言えば
親フォームに社員Noが有るということは そもそも その社員No
だけに対してなんらかの情報を入力するということですからね
ズラーと複数でること自体、理屈に合いません

投稿日時 - 2008-10-17 10:43:40

お礼

回答ありがとうございます。
残念ながらうまくいきませんでした・・・。
・結合キーを「社員No」から「配属」に変更(これはサブフォームのフィールドリンクの親と子のリンクの事ですよね??)しましたら、配属だけがズラズラでるだけでした。
・サブフォームは帳票フォーム(データフォームと理解していいのでしょうか?)になっています。
サブフォームのフィールドリンクの設定で親と子の”リンクなし”にすると社員No、配属、社員名がズラズラと出て理想のイメージになりました。しかし、サブフォーム上で任意のセルを選択した時に、上のフォームと連動し情報が切り替わればいいのですが、そうならないのです。何らかの命令式を入れるといいのでしょうか・・・?
でもおっしゃる通り、こだわってやるまでのことではないですね・・・。もっといろいろ勉強していきます。

投稿日時 - 2008-10-17 11:43:13

あなたにオススメの質問