アクセスで1ページに複数レコードを選択・表示させる方法

このQ&Aのポイント
  • アクセス2000を使って複数レコードを1ページに表示する方法を教えてください。
  • 現在、アクセスの参考書で勉強中ですが、フォームやウィザードを使用して指示表を作成する方法がわかりません。
  • どうすれば1つの画面に複数人の指示表を表示できるでしょうか?
回答を見る
  • ベストアンサー

アクセスで1ページに複数レコードを選択・表示させる方法

アクセス2000を使ってます。 今現在、簡単な参考書で勉強途中なのですが、よろしくご教授下さい。 ★作りたい物 (1) 1つの画面に、複数人の指示表を表示(例参照) (2) A・B・C・・・さんかは、その都度入力する   (例です) ○月×日     ご飯   ぱん  味噌汁  コーヒー --------------------------------------- Aさん  ある   なし  具入り  砂糖いり Bさん  なし   ある   ある  アメリカン Cさん  大    2枚   なし   モカ Dさん  小    なし  すこし  ブラック  ・    ・     ・    ・    ・  ・    ・     ・    ・    ・  ・    ・     ・    ・    ・ ★現在の状況 テーブルで テーブル(A)    ご飯   ぱん  味噌汁   コーヒー --------------------------------------- Aさん ある   なし  具入り   砂糖いり Bさん なし   ある  ある    アメリカン Cさん 大    2枚   なし    モカ Dさん 小    なし  すこし   ブラック テーブル(B) 本日の日時 1人目 2り目 3人目 4人目 5人目  ----------------------------------------- 1月1日   Bさん Cさん Dさん Aさん 1月2日   Aさん Bさん Cさん  1月3日   Eさん Kさん Aさん Bさん Mさん  ・      ・    ・     ・   ・  ・  ★質問 テーブル(A)と(B)は出来ましたがフォーム・ウイザードで例のような表を作ろうとしても出来ませんどうしたら良いのでしょうか?よろしくお願い致します。

noname#53281
noname#53281

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

  • ベストアンサー
回答No.4

コンパイルエラーの原因を色々考えてみたのですが・・・ もしかして、 >ORDER BY [名前], [日付], [来店順位];" '←ここは一行で この部分の、『ここは一行で』というのは、ページの関係で、 Me.RecordSource = "SELECT * FROM テーブルA WHERE 名前 In (" & tmp & ")  と ORDER BY [名前], [日付], [来店順位];" が2行に表示されるけど、1行にしてください。という意味なのですが、1行になってますか? なってないなら、この部分が赤字表示されていませんか?。 1行になってるのなら、別の原因を考えなければなりませんが、今のところちょっと思いつきません。すみません。 他の質問ですが、 >1人お客さんが来るたびにレコードが1つ増えるという事ですよね? そうです。 Aさんが11/3の最初のお客さんなら、 Aさん|2002/11/3| 1 というレコードになり、次にBさんが来たら、 Bさん|2002/11/3| 2 です。 >テーブルの名前をテーブルAとしました 問題はないと思います。 >クエリーは2つのデーターを関連付けるために使う物ですよね( クエリーはテーブルの中から、条件に合う物を抽出するのにも使います。 例として、クエリーの WHERE 名前 IN ('Aさん','Bさん') この部分は、対象となるテーブルの、「名前」項目が、Aさん又はBさんであるレコードが抽出されるわけです。 この場合はAさんとBさんが抽出されるのですが、次にDさん、Eさんを抽出したくなったら、クエリーを書き換えなければならなくなって、面倒です。 ですので、フォームから条件を入力したら(対象となる人の名前をテキストボックスに入力したら)、レコードが抽出されて便利かな、と思ったのです。 あと、私は暫くネットに接続できなくなりますので、その間は質問には答えられなくなりますので失礼します。

noname#53281
質問者

お礼

参考書に、問い合わせ応答クエリと言う項目がありましたので、コレを見ながら何とかやってみます。 >接続できなくなりますので との事ですので、一旦締め切る事にします。 ご解答大変ありがとう御座いました!!

その他の回答 (3)

回答No.3

おっしゃるような事をするには、クエリーが必要になると思います。 テーブル構造は私がNo2で示したようになっているとして、AさんとBさんの履歴を出すクエリーは、次のようになります。 SELECT * FROM テーブルA WHERE 名前 IN ('Aさん','Bさん') ORDER BY [名前], [日付], [来店順位]; 「'Aさん','Bさん'」の部分を来客によって変えるのですが、いちいちクエリーを編集するのは手間ですよね。 だからVBAを使うのが良いと思います。 まず、フォームを作ります。 フォーム・ウイザードで、基になるテーブルにテーブルAを指定して、表形式にします。 出来たフォームにテキストボックスとコマンドボタンを貼り付けます。 名前はテキスト1、コマンド1としておきます。 フォームの編集画面で「表示」ー「コード」を選んで、以下を貼り付けます。 Private Sub コマンド1_Click()  Dim tmp As String  tmp = テキスト1.Value  tmp = "'" & Replace(tmp, ",", "','") & "'"  Me.RecordSource = "SELECT * FROM テーブルA WHERE 名前 In (" & tmp & ") ORDER BY [名前], [日付], [来店順位];" '←ここは一行で End Sub 編集結果を保存して完成です。利用方法は以下になります。 フォームを開いて、テキストボックスに「Bさん,Cさん」という具合に表示したい人の名前を入力してコマンドボタンを押せば、目的の表示がでます。 この時、人の名前の間は、,(半角のコンマ)で区切って、スペースなどは入力しないようにしてください。 なおテキストボックスには「'Aさん','Bさん'」という具合に、名前を'で囲んで入力する方法でも良いのですが、間違いやすいのでVBAの方で処理するようにしました。

noname#53281
質問者

お礼

すみません、有難う御座います! VBAまで組んで頂いて、非常に助かります。 今日は仕事がOFFで、自宅なので明日チャレンジ致します、うまく出来たかどうか、締め切らずに(たぶん解らない事もあると思うので)もう1度補足致します。 ひとまず有難う御座いました。

noname#53281
質問者

補足

何だか・・・???状態です。 何だか答えだけが、すぐに出ちゃったもんだから エラーが出てもなにが何だか??、現象としては下記の状態になります。 ---------------------------------------------------------------------- コンパイルエラーで ORDER BY [名前], [日付], [来店順位];" '←ここは一行で VBの最後の行が反転して出ます。 ---------------------------------------------------------------------------- 何だか解らなくなってしまいました・・。それでチョット 整理していきたいのですが#2の答えで >日付+順番を記録した方が良いかもしれません。 と言う事は、1人お客さんが来るたびにレコードが1つ増えるという事ですよね? (1)クエリーは2つのデーターを関連付けるために使う物 ですよね(この辺も理解できてませんカンです)ですから #2の解答の後テーブルは1つになりましたので、 なぜクエリーは必要になるのでしょうか。 (2)上記を頭に描き、テーブルの名前をテーブルAとしました。 コレでよかったのか? (3)一様ためしに、クエリ・ウィザードでクエリを出してみたのですが  何だかサッパリ 「SELECT * FROM テーブルA WHERE 名前 IN ('Aさん','Bさん') ORDER BY [名前], [日付], [来店順位]; 「'Aさん','Bさん'」の部分を来客によって変えるのですが、いちいちクエリーを編集するのは手間ですよね。」 この辺の意味が解りません。 お手数ですが、こいつちっとも解ってない!全然ダメ この辺から勉強したほうが良いよ!!という感じでしたら 項を変えて質問しなおしますので、マズはここからと言う事をご指摘よろしくお願いします。

回答No.2

回答ではないのですが、こんな風に考えてみました。 たとえばテーブルAに日付をもたせます。 名前 ご飯   ぱん  味噌汁   コーヒー   日付 -------------------------------------------------------------------------- Aさん ある   なし  具入り   砂糖いり  2002/1/1 Bさん なし   ある  ある    アメリカン 2002/1/3 Bさん なし   あり  なし    アメリカン 2002/1/4 Cさん なし   なし  あり    砂糖いり  2002/1/4 このテーブルAを名前が「Bさん」のレコードを抽出すれば、 名前 ご飯   ぱん  味噌汁   コーヒー   日付 -------------------------------------------------------------------------- Bさん なし   ある  ある    アメリカン 2002/1/3 Bさん なし   あり  なし    アメリカン 2002/1/4 こうなって、Bさんの過去メニューが分るのですが、これでどうでしょうか。 この場合は一人ぶんのメニュー履歴しか表示されないので、Cさんの履歴を見たいときは抽出をやり直す必要が生じます。 それとも、Bさん、Cさんと来店した場合は、BさんとCさんの両方の履歴を表示しなければならないのでしょうか。 つまり下のような表示にするのでしょうか。 名前 ご飯   ぱん  味噌汁   コーヒー   日付 -------------------------------------------------------------------------- Bさん なし   ある  ある    アメリカン 2002/1/3 Bさん なし   あり  なし    アメリカン 2002/1/4 Cさん なし   なし  あり    砂糖いり  2002/1/4 どちらも可能ですが、来店の都度、Bさんの履歴、Cさんの履歴を表示した方が分りやすい様に思います。 それから、テーブルBは必要でしょうか? 例で示された出力結果には来店順番が関係していないように思います。 もしも来店順番が必要ならば、テーブルAにその日の何番目の来店かを数値で記録した方が簡単に思います。 次の様なテーブルです。 名前 ご飯   ぱん  味噌汁   コーヒー   日付   来店順番 -------------------------------------------------------------------------- Aさん ある   なし  具入り   砂糖いり  2002/1/1 3 これは、Aさんが2002/1/1に3人目のお客さんであることを示します。 まあ、同じお客さんが一日2回来店することもあるだろうから、日付+順番を記録した方が良いかもしれません。

noname#53281
質問者

補足

なるほど、1つのテーブルにまとめる事が出来るんですね! 勉強になります。 >どちらも可能ですが、来店の都度、Bさんの履歴、Cさん>の履歴を表示した方が分りやすい様に思います。 実は、実際の指示項目は10項目ほどあり、 おおよそ10名の来客に対し、同時期に平行して配膳の作業を行いますので忘れてしまうんです、1度に複数の指示が見れるほうが大変便利です。そうでなければ、何度もキーを叩き確認しなければならなくなります。 >どちらも可能ですが お手数ですが、同時に複数の指示が見れる方法を教えて下さい。 >もしも来店順番が必要ならば、テーブルAにその日の何 >番目の来店かを数値で記録した方が簡単に思います。 じつは、後でコレに売上の日計表と1カ月(30日)の来客平均をくっ付けようと思っていましたので、(素人考えで)2つに分けたほうがいいかな?と思ったもので。 テーブルAにつけてみます。

回答No.1

こんばんは。 私の想像力が乏しくて、わかりにくいのですが、 フォームで何を表示したいのか、どの項目を入力するのか。 テーブルAとBの関連は? もう少し具体的に書いてもらえると、想像できますが・・・ 補足してください。 ちなみに、テーブルBの項目は5人目までですか?

noname#53281
質問者

補足

わかり辛くて御免なさい。 一生懸命説明しますので、よろしくお願い致します。 (1)フォームで何を表示したいのか。  フォームで表示したいのは、A・B・D・K・・・さん、  などランダムに来る来客に対し、どういう献立を  出していけばよいかの(過去の)指示を、来客してくる 順番にそのつど、表示して行くようにしたい。   つまり、例えばXさんが1番目に来客した時に、Xさんと 入力すると、Xさんの過去食事したメニュー表示されるよ うにしたいのです。  さらに、Bさんが2番目に来客してBさんと入力すると  Bさんの過去食事したメニュー表示されるようにと、  順に60人分が1枚の(1日の)フォームに表示可能  にしたいのです。 (2)どの項目を入力するのか。  例の1番左の縦列部分、Bさんとか、Aさんとか、  ランダムに来客する時ごとに入力。 (3)テーブルAとBの関連は?  テーブルAは、入力項目の方々の過去         のオーダー履歴です。  テーブルBは、1日ごとの来客の順番と名前です。 (4)テーブルBの項目は5人目までですか?  出来れば60人までです。 ------------------------------------- 私には、本来1ページに複数レコードを表示させることが 出来るのか、またフォームを使っていいのか? どうかさえわかっていません。 わかりにくくて申し訳在りませんが よろしくお願い致します。

関連するQ&A

  • Accessでチェックボックス選択でレコード追加

    AccessDBで、下記のようなことをやりたいのですが、ご教授いただけないでしょ うか? 例)(実際の内容は違うのですが、例としてお伝えしやすい内容に変更していま す。) 野球のデータベースを作るとします。 野球の試合日のデータ(試合テーブル) 試合ID  0001 試合日  5月1日 天候   晴れ 試合相手 タイガース 試合場所 東京グランド こういった試合データが複数レコードある。 ここにチームのメンバ(メンバテーブル) A選手 B選手 ・・・・ Z選手 各選手の試合履歴を見るために各選手と試合データを結合させたいです。 5月1日の試合(試合ID0001)に、A,B,C選手が出場していたとしたら、 A 0001 B 0001 C 0001 を結びつけるようなテーブルを作ればよいと思うのですが、A,B,Cを入力して上 記レコードを作るのではなく、 A選手~Z選手のチェックボックスがあって、選択した選手の分だけ (今回でいうとA,B,C)が、 A 0001 B 0001 C 0001 というように0001と結合でするレコードを作りたいのです。 プルダウンでA,B,Cを選択する方法はわかるのですが、実際にやりたいのは、100 ぐらいの選択となるので、チェックボックスで選択したいのです。

  • アクセスで複数のテーブルを結合したい

    アクセスで,2つのテーブルを一つに結合するにはどうしたらいいでしょうか。 ちなみに,2つのテーブルはこんな感じです。 テーブル1       テーブル2  A B C D E   A S B F C D   1 3 4 8 9   5 8 8 9 7 8  

  • Accessのクエリで複数カラムの最大値表示

    Accessのクエリで複数カラムの中から最大のカラムデータを表示させる方法をお教えください。 テーブル名:TBL カラムA,B,Cがあっていずれも整数です。 カラムA,B,Cの最大のデータを表示したいのです。 データの例 A B C 10 14 12 → 14 21 18 19 → 21 15 11 17 → 17 このときSQL文でいえば次のようにすればできるのでしょうが、IF関数2回使わないで一発で最大値を表示させられないでしょうか。 Select iif(A>=B,A,B) as D, iif(D>=C,D,C) as E from TBL; Select Max(A,B,C) as D from TBL; のようなのがないでしょうか?

  • AccessでのNULLのレコードの表示方法は?

    例えば、下記のようなデータがあったとします。 名前   出勤日  労働時間 Aさん  11月29日  8時間 Bさん  11月29日  7時間 Cさん  11月30日  9時間 Dさん  11月28日  6時間 Eさん  11月27日  3時間 これをクエリで、出勤日を11月29日で抽出して、 名前   労働時間 Aさん   8時間 Bさん   7時間 Cさん   0時間 Dさん   0時間 Eさん   0時間 という感じで抽出するにはどうしたらいいのでしょうか? ご存知の方いらっしゃいましたら、ご教授お願いします。

  • このようなレコードの抽出・生成方法

    下記のようなテーブル、レコードがあるとします。 (テーブルAとテーブルBのコードは同意) テーブルA(PK:コードA,コードB,コードC,コードD) コードA コードB コードC コードD 000001 001 00 01 000001 001 00 02 000001 001 00 03 000001 002 00 01 000001 002 00 02 000001 002 00 03 テーブルB(PK:コードA,コードB) コードA コードB 000001 001 000001 002 ここでテーブルAに1件追加されたとします。 テーブルA コードA コードB コードC コードD 000001 001 00 01 000001 001 00 02 000001 001 00 03 000001 002 00 01 000001 002 00 02 000001 002 00 03 000001 001 00 04 ここで質問なのですが、 下記のようなレコードを生成するSQLを教えて欲しいのです。 イメージとしては、コードAとコードBをテーブルBから取得し、 他の項目は、上記で追加されたレコードをコピーといった感じです。 テーブルA コードA コードB コードC コードD 000001 001 00 01 000001 001 00 02 000001 001 00 03 000001 002 00 01 000001 002 00 02 000001 002 00 03 000001 001 00 04 000001 002 00 04 ←生成したいレコード わかりにくい質問で申し訳ないですが、 よろしくお願いいたします。

  • ACCESS2003単純計算方法

    ACCESSの質問お願いいたします。 ACCESS初心者です。 テーブルにA、B、C、Dの項目を作成し テーブルDにA-BやB-Cなどの計算を実行して Dのテーブルに代入する方法を教えてください。 クエリを使う課と思いますが、記述式は テーブル名でしょうか? よろしくお願いします。

  • アクセス 複数データの変換

    アクセス、またはエクセルで、テーブルのデータを、ほかのテーブルを参照にして、一括で変化する方法を教えてください。 具体的には、一つのテーブルに a b c a b d e f b d f g h となっているデータがあって、もう一つのテーブルに a apple b lemon c orange となっている場合に、最初のテーブルのデータをすべて、その対応する第二テーブルの内容に変換する方法です。 よろしくお願いします。

  • Access、複数のテーブルからデーターを抽出する

    Access初心者です。 いくつかのテーブルがあります(日付順に用意されています) そのテーブルから、指定のセル(といっていいのでしょうか) より、データーをクエリとして抽出したいのですが、簡単なやり方はあるのでしょうか? 例として、 テーブル名 [0301]、[0302]、[0303]、[0304]、[0305]、・・・・・・・・。という5つのテーブルがあります。 1つのテーブル内は、このようになっています。 ------------------------------------- A B C D E F G 1 2 3 4     11 22 33 44 55 66 5 ------------------------------------- この5つのテーブルより、「B4」から「F4」までのデーターのみを ------------------------------------- 0301 ・・・・・・・・・・・・・・・・・・・・・・・・ 0302   ・・・・・・・・・・・・・・・・・・・・・・・・ 0303   ・・・・・・・・・・・・・・・・・・・・・・・・ 0304 -------------------------------------- といったように取り出すことはできますか? どうぞ宜しくお願い致します。

  • ACCESSのフォームで次のレコードに移動しない方法を教えてください

    Windows2000&ACCESS2000の環境です。 テーブルから連結したフォームに、例えばA,B,C,Dと4つのテキストボックスがあります。 A,B,C,Dと入力していくと、最後のDの入力を入力した後「Enter」キーを押すと次のレコードのA,B,C,Dが表示されます。(次のレコードの入力になってしまいます) タブオーダー最後のDの入力のあとの「Enter」キーを押しても現在のレコードのAに戻る設定(やり方)を教えていただけると幸いです。

  • アクセスで重複するレコードを追加しない方法

    条件 Office97のアクセスを利用しています。 (会社のPCなので古いものしかありません) すでに作成されたデータベースがあります。 この中に、複数のテーブル・クエリ・他(フォームやマクロなど)があります。 分かる範囲でこのデータベースを触る許可はいただいています。 ただし、テーブルや保存の方法、データ型などの基本しかわからない初心者です。 状況 今回は、あるテーブルにデータを大量に追加したいと思っています。 その際、重複する(複数条件)データは追加しないようにしたいのです。 例えば、 【テーブルA】 オートナンバー   コード   場所   納場        001   AA001   東京    A           002   AA001   東京    B           003   AA001   東京    C           004   BB001   大阪    A           005   BB001   大阪    B    【テーブルB】             コード   場所   納場                AA001   東京    B                AA001   東京    C           → AA001   東京    D                  BB001   大阪    B 上記のテーブルが2つあり、テーブルAを元に、テーブルBのデータを追加する場合、 【テーブルA】 オートナンバー   コード   場所   納場        001   AA001   東京    A           002   AA001   東京    B           003   AA001   東京    C             AA001   東京    D           004   BB001   大阪    A           005   BB001   大阪    B というように表を更新したいと思っています。 上記の表のように「コード」が一致しても「納場」が一致しなければ追加を行いたいのです。 方法をご教授ください。