- ベストアンサー
アクセスで1ページに複数レコードを選択・表示させる方法
- アクセス2000を使って複数レコードを1ページに表示する方法を教えてください。
- 現在、アクセスの参考書で勉強中ですが、フォームやウィザードを使用して指示表を作成する方法がわかりません。
- どうすれば1つの画面に複数人の指示表を表示できるでしょうか?
- みんなの回答 (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さんを抽出したくなったら、クエリーを書き換えなければならなくなって、面倒です。 ですので、フォームから条件を入力したら(対象となる人の名前をテキストボックスに入力したら)、レコードが抽出されて便利かな、と思ったのです。 あと、私は暫くネットに接続できなくなりますので、その間は質問には答えられなくなりますので失礼します。
その他の回答 (3)
- gonta_goma
- ベストアンサー率50% (37/73)
おっしゃるような事をするには、クエリーが必要になると思います。 テーブル構造は私が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の方で処理するようにしました。
お礼
すみません、有難う御座います! VBAまで組んで頂いて、非常に助かります。 今日は仕事がOFFで、自宅なので明日チャレンジ致します、うまく出来たかどうか、締め切らずに(たぶん解らない事もあると思うので)もう1度補足致します。 ひとまず有難う御座いました。
補足
何だか・・・???状態です。 何だか答えだけが、すぐに出ちゃったもんだから エラーが出てもなにが何だか??、現象としては下記の状態になります。 ---------------------------------------------------------------------- コンパイルエラーで ORDER BY [名前], [日付], [来店順位];" '←ここは一行で VBの最後の行が反転して出ます。 ---------------------------------------------------------------------------- 何だか解らなくなってしまいました・・。それでチョット 整理していきたいのですが#2の答えで >日付+順番を記録した方が良いかもしれません。 と言う事は、1人お客さんが来るたびにレコードが1つ増えるという事ですよね? (1)クエリーは2つのデーターを関連付けるために使う物 ですよね(この辺も理解できてませんカンです)ですから #2の解答の後テーブルは1つになりましたので、 なぜクエリーは必要になるのでしょうか。 (2)上記を頭に描き、テーブルの名前をテーブルAとしました。 コレでよかったのか? (3)一様ためしに、クエリ・ウィザードでクエリを出してみたのですが 何だかサッパリ 「SELECT * FROM テーブルA WHERE 名前 IN ('Aさん','Bさん') ORDER BY [名前], [日付], [来店順位]; 「'Aさん','Bさん'」の部分を来客によって変えるのですが、いちいちクエリーを編集するのは手間ですよね。」 この辺の意味が解りません。 お手数ですが、こいつちっとも解ってない!全然ダメ この辺から勉強したほうが良いよ!!という感じでしたら 項を変えて質問しなおしますので、マズはここからと言う事をご指摘よろしくお願いします。
- gonta_goma
- ベストアンサー率50% (37/73)
回答ではないのですが、こんな風に考えてみました。 たとえばテーブル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回来店することもあるだろうから、日付+順番を記録した方が良いかもしれません。
補足
なるほど、1つのテーブルにまとめる事が出来るんですね! 勉強になります。 >どちらも可能ですが、来店の都度、Bさんの履歴、Cさん>の履歴を表示した方が分りやすい様に思います。 実は、実際の指示項目は10項目ほどあり、 おおよそ10名の来客に対し、同時期に平行して配膳の作業を行いますので忘れてしまうんです、1度に複数の指示が見れるほうが大変便利です。そうでなければ、何度もキーを叩き確認しなければならなくなります。 >どちらも可能ですが お手数ですが、同時に複数の指示が見れる方法を教えて下さい。 >もしも来店順番が必要ならば、テーブルAにその日の何 >番目の来店かを数値で記録した方が簡単に思います。 じつは、後でコレに売上の日計表と1カ月(30日)の来客平均をくっ付けようと思っていましたので、(素人考えで)2つに分けたほうがいいかな?と思ったもので。 テーブルAにつけてみます。
- gooco_chan
- ベストアンサー率25% (36/144)
こんばんは。 私の想像力が乏しくて、わかりにくいのですが、 フォームで何を表示したいのか、どの項目を入力するのか。 テーブルAとBの関連は? もう少し具体的に書いてもらえると、想像できますが・・・ 補足してください。 ちなみに、テーブルBの項目は5人目までですか?
補足
わかり辛くて御免なさい。 一生懸命説明しますので、よろしくお願い致します。 (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ページに複数レコードを表示させることが 出来るのか、またフォームを使っていいのか? どうかさえわかっていません。 わかりにくくて申し訳在りませんが よろしくお願い致します。
お礼
参考書に、問い合わせ応答クエリと言う項目がありましたので、コレを見ながら何とかやってみます。 >接続できなくなりますので との事ですので、一旦締め切る事にします。 ご解答大変ありがとう御座いました!!