アクセス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)は出来ましたがフォーム・ウイザードで例のような表を作ろうとしても出来ませんどうしたら良いのでしょうか?よろしくお願い致します。
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さんを抽出したくなったら、クエリーを書き換えなければならなくなって、面倒です。
ですので、フォームから条件を入力したら(対象となる人の名前をテキストボックスに入力したら)、レコードが抽出されて便利かな、と思ったのです。
あと、私は暫くネットに接続できなくなりますので、その間は質問には答えられなくなりますので失礼します。
参考書に、問い合わせ応答クエリと言う項目がありましたので、コレを見ながら何とかやってみます。
>接続できなくなりますので
との事ですので、一旦締め切る事にします。
ご解答大変ありがとう御座いました!!
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の方で処理するようにしました。
この回答への補足
何だか・・・???状態です。
何だか答えだけが、すぐに出ちゃったもんだから
エラーが出てもなにが何だか??、現象としては下記の状態になります。
----------------------------------------------------------------------
コンパイルエラーで
ORDER BY [名前], [日付], [来店順位];" '←ここは一行で
VBの最後の行が反転して出ます。
----------------------------------------------------------------------------
何だか解らなくなってしまいました・・。それでチョット
整理していきたいのですが#2の答えで
>日付+順番を記録した方が良いかもしれません。
と言う事は、1人お客さんが来るたびにレコードが1つ増えるという事ですよね?
(1)クエリーは2つのデーターを関連付けるために使う物
ですよね(この辺も理解できてませんカンです)ですから
#2の解答の後テーブルは1つになりましたので、
なぜクエリーは必要になるのでしょうか。
(2)上記を頭に描き、テーブルの名前をテーブルAとしました。
コレでよかったのか?
(3)一様ためしに、クエリ・ウィザードでクエリを出してみたのですが
何だかサッパリ
「SELECT * FROM テーブルA WHERE 名前 IN ('Aさん','Bさん') ORDER BY [名前], [日付], [来店順位]; 「'Aさん','Bさん'」の部分を来客によって変えるのですが、いちいちクエリーを編集するのは手間ですよね。」
この辺の意味が解りません。
お手数ですが、こいつちっとも解ってない!全然ダメ
この辺から勉強したほうが良いよ!!という感じでしたら
項を変えて質問しなおしますので、マズはここからと言う事をご指摘よろしくお願いします。
すみません、有難う御座います!
VBAまで組んで頂いて、非常に助かります。
今日は仕事がOFFで、自宅なので明日チャレンジ致します、うまく出来たかどうか、締め切らずに(たぶん解らない事もあると思うので)もう1度補足致します。
ひとまず有難う御座いました。
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回来店することもあるだろうから、日付+順番を記録した方が良いかもしれません。
この回答への補足
なるほど、1つのテーブルにまとめる事が出来るんですね!
勉強になります。
>どちらも可能ですが、来店の都度、Bさんの履歴、Cさん>の履歴を表示した方が分りやすい様に思います。
実は、実際の指示項目は10項目ほどあり、
おおよそ10名の来客に対し、同時期に平行して配膳の作業を行いますので忘れてしまうんです、1度に複数の指示が見れるほうが大変便利です。そうでなければ、何度もキーを叩き確認しなければならなくなります。
>どちらも可能ですが
お手数ですが、同時に複数の指示が見れる方法を教えて下さい。
>もしも来店順番が必要ならば、テーブルAにその日の何
>番目の来店かを数値で記録した方が簡単に思います。
じつは、後でコレに売上の日計表と1カ月(30日)の来客平均をくっ付けようと思っていましたので、(素人考えで)2つに分けたほうがいいかな?と思ったもので。
テーブルAにつけてみます。
No.1
- 回答日時:
こんばんは。
私の想像力が乏しくて、わかりにくいのですが、
フォームで何を表示したいのか、どの項目を入力するのか。
テーブル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ページに複数レコードを表示させることが
出来るのか、またフォームを使っていいのか?
どうかさえわかっていません。
わかりにくくて申し訳在りませんが
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- MySQL 【MySQL】本当に困っているので、助けてください。よろしくお願いします。 3 2023/06/03 14:24
- MySQL 【MySQL】本当に困っています。詳しい方、ご教授よろしくお願いします。 1 2023/06/03 14:18
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Excel(エクセル) Excelで在庫表(クエリ、ピボット) 2 2022/04/11 17:11
- Excel(エクセル) Excelでの複数条件のカウントについて 1 2022/09/25 07:40
- Access(アクセス) Access クエリ 同一テーブル内 複数フィールドの同時集計のやり方について 1 2022/05/18 19:01
- Access(アクセス) Access2016でフォーム内にExcelの複数シートを 表示させるイメージで複数テーブルの デー 1 2022/11/25 15:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
Accessレコードの追加や変更が...
-
Accessでテーブルからテーブル...
-
Accessクエリでの、LIKE条件
-
ACCESSに同時アクセス(編集)を...
-
Accessでvlookupみたいなことは...
-
リンクテーブルを CopyObject ...
-
Accessの追加クエリで既存のテ...
-
パススルークエリをテーブル作...
-
access テーブル内のレコード...
-
MS ACCESS でのメッ...
-
Accessでテーブルをデータシー...
-
ACCESSで指定されたテーブルか...
-
デザインビューで、連結式 を...
-
ACCESSのSQLで数値型に変換する...
-
Accessでテーブルにパスワード...
-
SQL ServerとACCESSの関係
-
AccessのDlookup関数の使い方を...
-
ツリー構造をRDBで表現するには?
-
AccessのテーブルからExcelをイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
ACCESSに同時アクセス(編集)を...
-
Accessクエリでの、LIKE条件
-
Accessでテーブルからテーブル...
-
access テーブル内のレコード...
-
デザインビューで、連結式 を...
-
2つのテーブルを比較して一致し...
-
3つの表を1つに縦に連結する
-
ACCESSで指定されたテーブルか...
-
Accessレコードの追加や変更が...
-
Accessの追加クエリで既存のテ...
-
Accessでvlookupみたいなことは...
-
SQLで条件指定結合をしたいがNU...
-
ツリー構造をRDBで表現するには?
-
SQLで日付を条件に削除したい
-
リンクテーブルを CopyObject ...
-
Accessのサブフォームで#Name...
-
時間の足し算
-
INSERT時にデータ登録とmaxの発...
-
SQL: SELECT UNIONすると文字数...
おすすめ情報