• ベストアンサー

ACCESSのフィールドに複数の情報を載せたいときは?

初めてACCESSでデータベースを構築しています。お教えください。  例えば「Aさんがカキを1つ買いました。」という伝票のデータベースは構築できました。お聞きしたいのは「Bさんはカキを1つ、と同時にクリも1つ買いました」という同時に「2品目」を買った場合の時の事です。  「2品目」というフィールドを作るのが良いのか、レコードを新しくした方が良いのか、それともそれ以外の方法(「1品目」に複数入力できる←これが出来れば一番良いんですが…)があるのかお教えいただきたいと思います。 よろしくお願いします。

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

  • ベストアンサー
  • cook2005
  • ベストアンサー率42% (40/95)
回答No.1

いわゆる請求明細という問題だと思います。これを簡単に解決する方法は請求マスタを作成し、明細テーブルを作り、主キーか何かで関連付けする方法です。明細項目数の上限が決まっているなら、1つのテーブルに明細を作成してもかまいませんが、明細がいくつになるか不明という状況なら、明細テーブルを別に持った方が拡張性に優れていると思われます。

otake99
質問者

お礼

ご回答いただきありがとうございます。急な出張等でお礼が遅くなり申し訳ありませんでした。ご回答に従い、なんとか満足いくものにたどり着くことが出来ました。ありがとうございました。

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.7

データデース設計の、大切な、しかし絶対正しいというのはない事項だと思いますが。私の経験から >2品目」というフィールドを作る 最悪 カキとクリの変化に対応しづらい。カキ・クリなど数の突出的増加分に対応しづらい。 取引数などは、捉えやすい。 >レコードを新しくした方が良いのか レコード間の処理はVBAなど使える人は良いが、クエリSQLなどでは、前後の両レコードの関係いとして捉えるのは、難しい。 カキ・クリなど数の突出的増加分に対応できる。 取引数は、レコード数でなく、別途カウント必要。 >フィールドを分ける方法(当然限度があるので、増やしても、オーバー時に困るが) 第2のお勧め。 フィールド間の横の関係で抽出はクエリ・SQLでやさしい。 結局、自分の対象業務の検索の多いパターンに便利なように設計すべきでしょう。精緻なプログラムを組める人はどうでもなりますが、主にそのシステムのメンテを扱うひとの技量も影響します。

回答No.6

多分、お持ちのACCESSにはNorth Windデータベースがサンプルでついていると思いますので、それを一度いじって見ることをお薦めします。このデータベースの受注フォームがおそらくおやりになりたいことなのではないかと・・・・・

noname#22222
noname#22222
回答No.5

どうも、今一つ、質問内容が理解できません。 そこで、どうしたら質問者の質問が成立するのかについて考えてみました。 まず、リレーショナルデータベースの設計ではないことは明らかなようです。 そうすると、 [ヘッダー部] ID 長整数型 伝票日付 日付型 伝票番号 長整数型 [明細部] 顧客名 文字列型 商品名 文字列型 数量 整数型 という設計が想定されます。 [ヘッダー部] ID 長整数型 伝票日付 日付型 顧客名 文字列型 伝票番号 長整数型 [明細部] 商品名1 文字列型 数量1 整数型 商品名2 文字列型 数量2 整数型 ・・・・ 商品名7 文字列型 数量7 整数型 という設計ですと、質問自体が成立しません。 売上伝票、請求伝票は、顧客単位発行するので[顧客名]はヘッダー情報に一つあればいい訳です。 [商品名]、[数量]は、1個も2個も発生するので、通常、明細行を7行程度必要とするでしょう。 ********************************************************************************** ここまでの設計が出来たら、次のステップは、主表=ヘッダー部、従表=名細部という表の分割だと思います。 *質問者が現行のテーブル設計を示されると、問題点が明確になりそうですが...

回答No.4

3品目の時はあるのでしょうか?今現在作成しているのは「明細テーブル」だと思いますが… 下記の方がおっしゃるように、レコードに毎に記述するべきです。例えば同じ注文があった際にNo2さんのテーブルのままだと同じ注文が幾つもあって分からなくなる可能性があります。明細番号というフィールドを加えて、1回の注文として明細テーブルの各レコードをまとめる必要があります。 こうしておいて、同じ明細番号で選択したレコードを伝票に並べて書き出すことができれば、X品目の品をX個、購入されても対応できます。 そして更にこのテーブルを管理する、明細番号によって顧客名や商品名に関するテーブルをつけて、整合性をとりやすくします。 でも、こうなるとデータベースを細部から全体を構築しているので、正攻法ではない気がします。正規化や構築法をどうすべきかは、こういう場ではやはり字数が足りないと思います。データベースは奥が深いです。機会があったら勉強してみてください。私も勉強の身です。まちがっていたらすみません。参考↓

参考URL:
http://www.kogures.com/hitoshi/webtext/db-seikika/
otake99
質問者

お礼

アドバイスいただきありがとうございました。参考のURL見させていただきました。おっしゃるとおりデータベースは奥が深いというのを実感させられました。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.3

例でのテーブルのフィールド(最小の場合)は「購入者」「商品」「個数」ですよね。 後で購入者、商品ごとの集計があるなら別のレコードがいいのではないですか? 入力時の問題なら、サブフォームを作って購入者単位に複数行の入力を行うようにすればいいかと思います。

otake99
質問者

お礼

アドバイスいただきありがとうございました。仰せのとおり「サブフォーム」も何とかでき、無事形にすることが出来ました。ありがとうございました。

noname#21550
noname#21550
回答No.2

テーブルの構造ですか? 通常は2品目というフィールドを追加することはしません。 例えば、品数などのフィールドを設けます。 例  ・購入日時  ・名前  ・品数  ・品名 のようにし、  2005/1/11 Aさん 1 カキ  2005/1/11 Aさん 2 クリ とすることで、何個でも購入可能なテーブルになります。

otake99
質問者

お礼

ご回答いただきありがとうございました。また、御礼が遅くなり申し訳ありませんでした。ファイルメーカーPROは使ったことがあり、そこでは、「繰り返し入力」というものが出来ましたが、ACCESSにはないようですので、ご回答のとおり作ってみました。なんとかなったと思います。ありがとうございました。

関連するQ&A

  • アクセスのカウント(件数)について。

    アクセスでAフィールドとBフィールドがあり、AフィールドとBフィールドの両方に入力があるレコードと、AフィールドとBフィールドのどちらかに入力があるレコードの合計レコード数を求めたいのですが、どのようにしたらよいのでしょうか?(つまりAフィールドとBフィールドの両方に入力がないレコード以外をカウントしたいのです。)よろしくお願いいたします。

  • ACCESS フィールドをまとめたい

    ACCESS2007で同じレコードにある複数のフィールドを   レコード1:番号A  名前A  番号B  名前C  番号C  名前C   レコード2:番号A  名前A  番号B  名前C  番号C  名前C こんな感じに、新規のテーブルやクエリーで「番号」と「名前」にまとめたいのですが      レコード1:番号A 名前A   レコード2:番号B 名前B   レコード3:番号C 名前C   レコード4:番号A 名前A   レコード5:番号B 名前B   レコード6:番号C 名前C    お手数ですがご教示ください。  よろしくお願いいたします。

  • アクセス フィールド 500個

    アクセスでは、1テーブルでフィールド個数が255までと、制限があるようですが、1レコードに500個のフィールドが必要となりました。2個のテーブルを開いて、500個のフィールドに対して、レコードを単票形式で入力できる様にするには、どうしたらよろしいか?よろしくお願いいたします。

  • accessのルックアップフィールドのような複数値を持つフィールドの機

    accessのルックアップフィールドのような複数値を持つフィールドの機能があるデータベースはOracle,MySqlみたいなDBにはないでしょうか? それかない理由でもあるのでしょうか?結構便利だとは思うんですが検索して調べてもなかなかでてこなかったです。

  • アクセスで値を参照したい

    Win2000,Access2000を使用しています。 AB二つのテーブルに「仮番号」というフィールドがあり、同じ「仮番号」のレコードに同じ「伝票番号」をつけたいんです。 Aテーブル(お客様情報) Bテーブル(注文履歴) Aテーブルの「伝票番号」フィールドに番号を入力したら、BテーブルのAと同じ「仮番号」のレコードの「伝票番号」フィールドに番号が入力されるようにしたいのですが、どのようにVBまたは、フォーム上のテキストボックスのプロパティで組んだらよいのかわかりません。 Bテーブルには、過去の注文データもあるのですでに入力されているレコードには過去に受注した時の伝票番号入力されています。 新規入力したレコードに対してだけAと同じ伝票番号をつけたいのです。 Bテーブルで、         |商品名|価格  |伝票番号| 過去の受注データ|電卓 |¥500|1000  | 今回の受注データ|名刺 |¥800|2500  | と、こんな感じにしたいんですが うまく説明できず申し訳ありませんが、どうぞよろしくお願い致します。

  • ACCESSの複数フィールドの検索

    私がしたい事はおそらくかなり初歩的なことと類推されますので、がっくりされないようにお願いします。 「報告書」のテーブルがあります。 その報告書のフィールドは 報告日 報告者氏名 A店の感想 B店の感想 C店の感想 となっていると考えてください。 このテーブルをもとに、表形式で一覧の出るフォームを作っており、この一覧のフォームフッターにテキストボックスがあります。 このテキストボックスに例えば「D商品」と入力してエンターを押すと「A店の感想 B店の感想 C店の感想」中に「D商品」が出てくるレコードすべてが抽出されるというようにしたいと思っています。 1つのフィールドでのやり方がとあるサイトにあったので、私は Private Sub テキスト28_AfterUpdate() Me.Filter = "A店の感想 like'*" & Me!テキスト28 & "*'" Me.FilterOn = True End Sub という式を作成しました。 これだと「A店の感想」フィールドにキーワードがあればヒットしますが、B店、C店にキーワードがあってもA店にキーワードが無ければ反応はありません。 これを3つのフィールドで出来るようにいくつか試してみましたがどれも失敗でした。 どのようにすれば、複数フィールドのキーワード検索・抽出が出来るのでしょうか。 私の取ったやり方に近いもの、別の全然違うやり方、ともに勉強になるので色々教えてください。 それと、これでも結構検索したのですが、検索ワードが不適切なのか、ありそうなニーズにも関わらずぴったりくるものを見つけられませんでした。 もしよければACCESSをわかりやすく学習出来るサイトを教えてください。有名そうなところをいくつかは知っております。

  • Access フィールド2つの文章を改行入れ一つに

    Access2013 フィールドA(短いテキスト)に入力してある文章の頭に、フィールドB(短いテキスト)に入力してある文章を一挙にコピーし貼り付ける際、この文章間を改行する方法を教えて下さい。 更新クエリで、レコードの更新の欄に何と記入したらよいでしょうか。 宜しくお願いします。

  • 【access】複数のフィールドの不一致クエリ

    アクセスはまったくのド素人です。 OS:WindowsXP バージョンは2000です。 A,Bのテーブルがあり、それぞれのレコードは以下の通りです。 A a b c 1 4 7 2 5 8 3 6 9 5 6 8   B  d e f 5 6 8 1 4 7 2 1 3 4 4 6 d,e,fのフィールドがa,b,cと一致しないレコード(ここでは『2 12 13』と『2 1 3』)をクエリで抜き出したい時はどうすればよいでしょうか? d,e,fに『Is Null』を指定して不一致クエリを実行しても思うように行きませんでした。

  • アクセスの複数フィールドからの抽出について教えてください。

    「テーブル1」があり、「テーブル1」の中にフィールドA、フィールドB、フィールドC、フィールドDがあります。  その4つのフィールドの中のどれにも”あ”という言葉が含まれていないレコードを探しだしたいのですが、クリエでOR検索してもうまくいきません。  フィールドAに”あ”は無くても、フィールドBかフィールドCに”あ”といいう文字が含まれているものが出てきてしまいます。どうしてでしょう・・・  ちなみにSQL文は SELECT * FROM TABLE1 WHERE ((Not (TABLE1.フィールドA)="あ")) OR ((Not (TABLE1.フィールドB)="あ")) OR ((Not (TABLE1.フィールドC)="あ")) OR ((Not (TABLE1.フィールドD)="あ"));  となっています。明らかに初歩的な問題だと思われますが、初心者のため分からず困っております。  アドバイス、よろしくお願いします。

  • ACCESS 以下のようなレコードを抽出するSQL

    ACCESSのデータベースで あるフィールド(フィールドAとします)の値に対して、 別のフィールド(フィールドBとします)の値が1つに決まる データベースがあるとします。 例えば、フィールドAの値が1のレコードは、 どのレコードもフィールドBの値はaである。など このようなデータベースでこのような関係になっていないレコード 例えば、フィールドAの値が1のレコードの中に フィールドBの値がaであるレコードと フィールドBの値がbであるレコードがある。など を抽出するSQLはどのように記述すればよいでしょうか。 テーブル名はTABEL1とします。 次の2つのケースでお願いします。 (1)フィールドAの値が異なればフィールドBの値が異なる場合 例えば、フィールドAの値が1で、フィールドBの値がaであるレコードが ある時、フィールドAの値が1でないレコードの中には、   フィールドBの値がaであるレコードが存在しない場合   (2)フィールドAの値が異なるがフィールドBの値が同じこともある場合 例えば、フィールドAの値が1で、フィールドBの値がaであるレコードが あっても、フィールドAの値が1でないレコードの中にも、   フィールドBの値がaであるレコードが存在する場合 【回答例】(ただし、1,a,bなどの具体的な値は使わないこと) ・フィールドAの値が1のレコードを表示する例 SELECT * FROM TABLE1 WHERE フィールドA=1; ・フィールドAの値が1でフィールドBの値がaのレコードを表示する例 SELECT * FROM TABLE1 WHERE フィールドA=1 AND フィールドB='a'; ・フィールドAの値が1でフィールドBの値がaのレコードと  フィールドAの値が1でフィールドBの値がbのレコードを表示する例 SELECT * FROM TABLE1 WHERE (フィールドA=1 AND フィールドB='a') OR (フィールドA=1 AND フィールドB='b'); この目的は、データベースに問題があり、 問題となっているレコードを見つけて直したいのです。 よろしくお願いします。

専門家に質問してみよう