• ベストアンサー

Accessの初心者です。Access2007を使用しています。

Accessの初心者です。Access2007を使用しています。 非連結フォームで作成しています。 下記のようなイメージです。 <親フォーム> 「会員番号」:主キー⇒フォーム上で直接入力して検索させて、会員名などフォームにVBAで表示させています。 <サブフォーム> 親フォームで入力した「会員番号」を元に、サブフォームの内容を抽出して表示させたいです。 非連結の親フォームと子フォームを連結させる、プロパティシートの設定すら よくわかっておりませんが、ご回答お願いします。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

どうやらフォームの表示までは 出来たようですね。 まだどこかに問題が残って いるようですが。デザインビュー にして、また元にもどすと反映 されている・・・・。 1 フォームには検索用のtx会員番号   というテキストボックスは設置   されていますね。 2 フォームにコマンドボタンは   設置されていますね。 3 コマンドボタンのプロパティ   シートを表示し、クリック時   のイベントにコードビルダを   選択し、それをダブルクリック   すると、コード表が出てきます。 Private Sub コマンド1_Click() End Sub   このようになっていたら、真ん中   に Me!frmSub.Requery をいれて、 Private Sub コマンド1_Click() Me!frmSub.Requery End Sub となるようにしてください。 コマンド1の1は違う数字になっている   かもしれません。   と、いうようにしていますね。 まず、以上3点を確認してください。 なお、サブフォームの表示はサブフォーム の既定のビューにデータシートを選択しな いと一覧表示ができないので、それも 確認しておいてください。 何かあれば書き込みをしてください。   

finetomato
質問者

お礼

ご回答ありがとうございます。 できました!! 丁寧でわかりやすい回答本当にありがとうございました。 助かりました。

その他の回答 (4)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

説明で抜けていました。説明の 真ん中あたりの、 次に新規のフォームをつくり、 デザインビューで開きます。 のところで、 このとき作るフォームをfrmSub と命名します。

finetomato
質問者

お礼

ご回答ありがとうございます。 やってみるとできました!感動です!! ただ、メインフォームを開いて、「会員番号」を検索すると、 サブフォームには何も表示されないのですが、デザインビューに切り替えて その後フォームビューを開くと、サブフォームに反映されています。 なんででしょうか? プロパティの設定でしょうか? わかりやすい回答と、私のつたない説明にご回答いただき本当にありがとうございました。 もしよろしければ、またご回答お願いします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

遅くなってすみません。 様子がわかりました。親フォームの 中にサブフォームを入れ込むことは 完成しているのでしょうか。まだと いうことも考えられるので、そこから いきます。親フォームをfrmMain、 サブフォームをfrmSubと命名します。 frmMainをデザインビューで開きます。 ツールボックスを出して、その中の サブフォームサブレポートというと ころをクリックしてfrmMainの中に 適度な四角形をつくります。その 四角形の上で右クリックしてプロパティ からプロパティシートを出します。 プロパティシートの名前をfrmSub とします。 次に新規のフォームをつくり、 デザインビューで開きます。ツール ボックスを出し、テキストボックスを 三つ入れておきます。ラベルはついた ままで結構です。 サブフォームの左上の黒いところを ダブルクリックしてプロパティシート を出し、レコードソースのところに 以下のSQL文を貼り付けます。 SELECT tbl購入.購入ID, tbl購入.会員番号, tbl購入.商品 FROM tbl購入 WHERE (((tbl購入.会員番号)=[Forms]![frmMain]![tx会員番号])); ここで、購入テーブルはtbl購入として います。また、親フォームの会員番号 を入れるテキストボックスをtx会員番号 としています。 このまま保存します。次にサブフォームの テキストのひとつを選択し、右クリックして プロパティシートを出し、コントロール ソースをクリックし、購入IDを選択します。 同様にして他のテキストボックスの コントロールソースをそれぞれ会員番号、 商品を選択し保存して閉じます。 次に親フォームをデザインビューで開き、 何も表示されていない空の四角形のところ で右クリックしメニューのプロパティ をクリックしプロパティシートを出します。 プロパティシートのソースオブジェクト をクリックしfrmSubを選択します。 すると四角形にfrmSubのデザインビュー が表示されます。これで連結は終了です。 保存して閉じます。これで準備は終了です。 購入テーブルにデータが入っていれば frmMainで操作をすれば指定した会員の データが表示されます 。 サブフォームのレコードソースに貼り付けた SQLはフォームのtx会員番号と同じ番号を 持つレコード購入テーブルから選ぶ、という 意味です。これでテキストボックスの 会員番号と購入テーブルの会員番号が 同じものだけがサブフォームに表示される ことになります。 テーブルを直接サブフォームに設定したい ときは親フォームのデザインビューでソース オブジェクトにテーブルを指定すれば フォームにテーブルが表示されます。 この場合は会員番号とは関係なく全データ が表示されます。 何かわからなければ書き込んでください。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

tbl会員の会員番号をテキスト型に してそれを主キーにし、たとえば 001、002、003・・・などにしても データは取り出せます。 何かエラーが出ましたか。エラーの 内容がわかれば教えてください。

finetomato
質問者

お礼

すみません、私の説明不足です。 リレーションシップを組んでいるテーブル同士を、フォームウィザードを使用せずに、 作成しています。 イメージは下記のような感じです。 ◆会員テーブル◆ ・主キー:会員番号(テキスト型) ・会員氏名(テキスト型) ◆購入テーブル◆ ・主キー:購入ID(オートナンバー型) ・会員番号(テキスト型)…会員テーブルの会員番号とリレーションシップを組んでいます。 ・商品(テキスト型) ◆◆入力フォーム◆◆ メインフォーム:会員番号を入力して検索すると、会員テーブル.会員氏名が表示されるように作成しました。ここまではできました。 このメインフォームの中に、購入テーブルをサブォームとして表示したいのですが、 入力した会員番号のデータの表示方法がわかりません。 上記のような状態です。 ご教授くださった方法は、サブフォームの主キーと、メインフォームの主キーが一致するから検索 表示ができるのでしょうか? 私は浅はかな知識しかありませんが、もしよろしければ教えてください。 よろしくお願いいたします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

http://oshiete1.watch.impress.co.jp/qa5573871.html で似たよう質問に回答しましたが、それを 質問の内容に置き換えてみます。 メインフォームをfrmMainとします。 サブホームをfrmSubとします。 1 メインフォームについて。 非連結テキストボックスの名前をtx会員番号と します。データがあるテーブルをtbl会員 とします。フィールドは会員番号(オートナンバー)、 会員名(テキスト型)とします。 2 サブフォームについて。 サブフォームのレコードソースに、 SELECT tbl会員.会員番号, tbl会員.会員名 FROM tbl会員 WHERE (((tbl会員.会員番号)=[Forms]![frmMain]![tx会員番号])); を貼り付けます。その方法は、 サブフォームをデザインビューで開き、 フォームの左上の小さな四角い黒い点に カーソルを当てて右クリックすると メニューが現れ、その中のプロパティを クリックします。するとプロパティ表が 出てくるので、その一番上のレコードソ ースという欄に書かれているのがあれば 削除して、 かわりに提示したSQL文を貼り付けます。 サブフォームにはデザインビューで 会員番号も入れておきます。表示が必要なけれ ば実行時にツールバーの書式→列の再表示 と進んで会員番号のチェックをはずしてください。 3 親フォームと子フォームの連結 frmMainをデザインビューで開き、 サブフォームの部分で右クリックし、 出てきたメニューのプロパティを クリックします。プロパティシート のソースオブジェクトのところを クリックしてfrmSubを指定します。 ついでに名前の部分もfrmSubとして おきます。これで連結の終了です。 4 ボタンの設置 親フォームにボタンをひとつ設置 します。ボタンの上で右クリックし、 プロパティを選択し、クリック時 のイベントでコードビルダを選択し、 Private Sub コマンド1_Click() Me!frmSub.Requery End Sub とすればサブフォームにはtx会員番号と同じ 会員番号をもつデータが表示されます。 コマンド1_Click()の部分は違うかも しれませんが、 Me!frmSub.Requery を貼り付けて保存すれば終了です。 これで一通りですが、会員管理、 顧客管理、住所録などは似たような 形式が多いのでネット、本、Office のサンプルなどでいいものがあります。 是非探して応用してみてください。 疑問があればまた質問されては いかがでしょう。

finetomato
質問者

お礼

ご回答ありがとうございます。 試してみたのですが、できませんでした。 会員番号が、テキスト型なので、それが問題なのでしょうか? もしよろしければご教授ください。 よろしくお願いします。

関連するQ&A