ACCESSのクエリ作成方法とは?

このQ&Aのポイント
  • ACCESSのクエリ作成方法について解説します。デザインビューを使用してクエリを作成すると、固定された条件になってしまう場合がありますが、ユーザーに求めることは可能です。
  • 在庫管理のために、ACCESSでテーブルを作成し、商品コードや在庫量などの情報を管理しています。ユーザーに商品コードを入力させ、その商品の在庫量を表示させるにはどうすれば良いかについて説明します。
  • ACCESSのクエリを使ってユーザーが入力した商品コードを条件として、該当する商品の在庫量を取得する方法について説明します。デザインビューを使うと条件が固定される場合があるため、注意が必要です。
回答を見る
  • ベストアンサー

ACCESSのクエリの作り方

テーブル名   在庫 商品コード 品名 入庫日 在庫量 ・・・ があります データとして A0000,在庫品1,2005/10/10,50 A0000,在庫品1,2005/12/25,70 A0000,在庫品1,2005/12/28,20 B0000,在庫品2,2005/12/28,10 B0000,在庫品2,2005/12/29,5 C0000,在庫品2,2005/12/30,30 という具合になります。 入庫日の都合上、商品コードがユニークになりません。 この場合 フォームを作って 商品コードをユーザーに入力させ、在庫量を表示させるにはどうしたら良いのでしょうか? 例えば"A0000" だと140になります。 SQLで商品コード=ユーザー入力文字列・・・ とかいうのは知っているんですがACCESSの使い方がよくわかりません、 デザインビューでクエリを作成するとかやるとこの場合固定(商品コードが)されて しまうようです。ユーザーに求めることは出来るのでしょうか?

  • 5S6
  • お礼率59% (1504/2542)

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

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.6

>これを元にフォームを作る方法がわかりません フォームの新規作成でウィザードを開きフォームウィザードで入力された商品コード1レコードのみ表示するなら単票形式でも表形式でもかまいません。お好きな方を選択して作ってください。 >[Forms]![在庫抽出]![SN_CODE1]にしてみました。 >enter時にこのクエリを実行して表示させればいいんですよね?・・よくやり方がわかりません。 作ったフォームをデザインビューで開きフォームヘッダにSN_CODE1というテキストボックスを作ります。 SN_CODE1のプロパティを開きイベントの更新後処理欄の右の...をクリックするとビルダの選択が表示されますのでコードビルダを選択します。 開いたVBに DoCmd.Requery と記述もしくはコピーして貼り付けでもかまいません。 Private Sub SN_CODE1_AfterUpdate() DoCmd.Requery  '←ここに記述するかコピーします End Sub VBを閉じフォームを保存すれば出来上がりです。 フォームを開きSN_CODE1に商品コードを入力しEnterキーを押すとフォーム詳細に表示されます。

5S6
質問者

お礼

ありがとうございました。

その他の回答 (5)

noname#60992
noname#60992
回答No.5

NO4です。 NO3の方とかぶってしまいました。 NO3の方がしっかり説明しておられますので、無視してくださって結構です。

noname#60992
noname#60992
回答No.4

フォームをつくり、リストボックスなりコンボボックスなりを貼り付けて、そこで商品コードを選択させます。 あとはNO2の方がおっしゃっているようなクエリを作り、そのクエリの商品コードの抽出条件に  Forms![フォーム名]![リストボックス名] と書いておけば、フォームを開いている間にクエリを実行させれば、良いと思います。 もしくは、クエリの抽出条件に [商品コードを入力してください。] みたいな事を入力して置けば、クエリを開く際にパラメーターの設定を行うことができます。 この際はユーザーが間違えて実際にありえない商品コードを入れる可能性があることを考慮しておかなければなりません。 (何も抽出されません)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

在庫テーブルのクエリを新規クエリの作成でウィザードを使って商品コード・品名・在庫量のフィールドをもつ選択クエリを作り保存します。 そのクエリをデザインビューで開きマウスポインタをフィールド上の位置で右クリックしメニューの集計を選択します。 商品コード・品名の集計の欄をグループ化にして在庫量を合計に設定します。 商品コードの抽出条件に [商品コードを入力してください] と上記をコピーし保存します。 このクエリを開こうとすると[商品コードを入力してください]というダイアログが開きますのでそこに商品コードを入力すると入力された商品コードのみ表示され在庫量の合計を表示します。 試しに作ってみてください。 SQLで書くとこんな感じです。 SELECT 在庫テーブル.商品コード, Sum(在庫テーブル.在庫量) AS 在庫量の合計 FROM 在庫テーブル GROUP BY 在庫テーブル.商品コード HAVING (((在庫テーブル.商品コード)=[商品コードを入力してください])); このクエリを利用します。 >フォームを作って商品コードをユーザーに入力させ・・ クエリの抽出条件に入れた[商品コード入力してください]の代わりにフォーム上にテキストボックスを作りそこに入力された商品コードを抽出条件に代入させれば出来ます。 フォーム1にあるText1というテキストボックスの値(入力された商品コード)を代入する場合。 クエリの抽出条件に [Forms]![フォーム1]![Text1] とすればText1に入力された商品コードのみ抽出して在庫量を合計することが出来ます。 このクエリを元にフォームを作り表示するようにすれば良いのではないでしょうか。

5S6
質問者

お礼

ありがとうございます。 クエリ作成まではできました。 商品コード入力ダイアログを出して抽出できました。 これを元にフォームを作る方法がわかりません。 イメージとしてはフォームのヘッダ部分に商品コードを入れてEnter押すと クエリを実行し、指定された商品コードのデータがでることをイメージしています。 クエリの方は [Forms]![在庫抽出]![SN_CODE1] にしてみました。 enter時(なにかボタンを作ってもかまいませんが)にこのクエリを実行 して表示させればいいんですよね??? よくやり方がわかりません。

  • gura_
  • ベストアンサー率44% (749/1683)
回答No.2

 1 「クエリの新規作成」で「デザインビュー」を開き、対象の「テーブル」を追加して、「選択クエリ」の作成画面に入ります。 2 「商品コード」と「在庫量」のフィールドを追加し、「Σ」のボタンを押すと、「集計」の行が追加されますから、「在庫量」の下の「グループ化」を「合計」に変えます。 3 ここで、ツールバーの左端のボタンで「データシートビュー」を選択すると、その「合計」が表示されます。 4 このウインドの右上の「X」マークで閉じようとすると、クエリの名前の変更保存を聞いてくるので、「はい」を押し「クエリ名」を付けて「OK」で、目的のクエリが保存されます。↓ http://www.mahoutsukaino.com/ac/ac2000/ac2000/qry0/13.htm

参考URL:
http://www.mahoutsukaino.com/ac/ac2000/ac2000/qry0/13.htm
  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.1

すみません。質問している事が、よく判ってませんが・・・。 > ユーザーに求めることは出来るのでしょうか? なら、変数を設定すれば可能ですし、Forms![コントロール名]で、クエリからフォームの値も参照可能ですが・・・、こういう話ではなくて???

関連するQ&A

  • アクセスのクエリで出来る事なのでしょうか?

    以下の様な処理がクエリで出来るものかの判断がつかず、また、出来るとしてもクエリの作り方が判りません。。。 [テーブルA] コード 品名  種類 1111  A    0 1111  A    1 1111  A    2 1111  A    3 2222  B    0 2222  B    1 2222  B    2 2222  B    3 2222  B    4 3333  C    0 3333  C    1 3333  C    2 3333  C    3 3333  C    4 3333  C    5 3333  C    6 以上の様なフィールド構成を持つテーブルです。 「コード」で管理される「品名」の持つ「種類」の列の最大値を、新しく追加した「在庫」列を持つテーブルBの「在庫」列に抽出して以下の様に同一「コード」内に全て書き込みたいと思っておりますが、クエリ作成の勉強を始めたばかりで、上記の様な複雑(?)なクエリの作り方が判りません。 ※簡単なクエリをデザインビューで作ったり、SQL ビューで簡単な改造が出来る位です。 [テーブルB](処理後) コード 品名  種類 在庫 1111  A    0   3 1111  A    1   3 1111  A    2   3 1111  A    3   3 2222  B    0   4 2222  B    1   4 2222  B    2   4 2222  B    3   4 2222  B    4   4 3333  C    0   6 3333  C    1   6 3333  C    2   6 3333  C    3   6 3333  C    4   6 3333  C    5   6 3333  C    6   6 尚、「種類」列の値は必ず0から順番に(012345・・・の様に)並ぶ規則となっております。 テーブルAに「在庫」列を追加挿入してから「種類」の最大値を書き込む方法でも、テーブルB(テーブルAをコピーして「種類」列を追加したテーブル)に書き込ませる方法でもどちらでも問題はありません。 どなたかご教示頂ければと思います。宜しくお願い致します。  

  • access2000です。

    こんばんは。 いつもお世話になります。 アクセスで困っております。教えてください。 テ-ブル1(原料マスター) コード  品名 100    A 200     B 300    C テーブル2(入出庫明細) 日付  コード  入庫  出庫 4/1   100    10 4/2   100          10 4/2      200    10 テーブル3(月初在庫) コード  在庫 100    10 200    100 300      50 クエリー1(入出庫の月合計) テーブル2より コード  入庫合計  出庫合計 100     10     10 200     10 クエリー2(在庫の算出) テーブル1の全コードを使用 コード  月初在庫 入庫合計 出庫合計 現在庫 100      10       10       10        10 200      100        10 300      50 となり、入庫や出庫にデータが入っていないコードのものは、現在庫が表示されません。入庫の合計は集計を合計としているだけです。現在庫はフィールドにビルドでテーブル1の月初在庫+入庫合計-出庫合計と入力しており、集計は演算としています。データの入っていないところを無視させて現在庫を全て表示させたいのです。 宜しくお願い致します。

  • Accessで前回発注分だけ抜き出すクエリは

    お世話になっております。 Accessで発注テーブルから、前回の発注分のレコードだけ を抜き出すクエリがあれば教えてください。 発注テーブルの構成としては 商品コード 発注数 発注日 A-1     15    2014/07/05 A-1     10    2014/07/10 A-2     25    2014/07/12 B-3    30 2014/07/14 B-3     30    2014/07/18 という構成になっており、この場合、 A-1の2014/07/10の発注分 A-2の2014/07/12の発注分 B-3の2014/07/18の発注分 をクエリで抜き出したいと思います。 当方SQL文とモジュールが使えませんので クエリのデザインビューでの方法をご教授 いただけますとありがたいです。 どうぞよろしくお願いいたします。

  • ACCESSのクエリーで

    ACCESSのクエリで たとえば下記のテーブルがあったとき コード 品名 1   商品001 3   商品003 4   商品A 7   商品BB と有ったときACCESSのクエリで 1   商品001 2 3   商品003 4   商品A 5 6 7   商品BB のようにテーブルに無いコードのところは空番にしないで 番号をだけを付けるのは可能でしょうか? もとのテーブルはいじりたくないので・・・ もし、やり方が有るならば教えてください

  • アクセス 削除クエリ☆★

    アクセス初心者です。 テーブル【在庫】 メーカー名 ナンバー A社     1 B社     2 C社     3 テーブル【出庫】 ナンバー 1 3 削除クエリ実行 ↓ テーブル【在庫】 B社     2 在庫、出庫テーブルがありナンバーが一致する場合は在庫テーブルの行を削除したいのです。 初心者でSQLがまったくわかりません。 デザインビューでは出来ないものなのでしょうか?? おわかりの方教えてくださーい!

  • access 更新クエリ?追加クエリ?

    access超初心者です。 いま、下記のような在庫表をつくっています。 (出庫テーブルは省略してます) 入庫テーブル  ID  入庫日付  大分類  中分類  小分類  数量   在庫テーブル  ID  大分類   中分類   小分類  最初の数  入庫数   出庫数 入庫更新クエリ *入庫→在庫  大分類        中分類           小分類 ・入庫の全レコードと在庫表の同じ結合フィールドのレコードだけを含める で結合しています。 *在庫表の入庫数  レコードの更新で  NZ([在庫数]![入庫数],0)+NZ([入庫]![数量],0) といれています。 入庫テーブルに入力していき その都度、 入庫更新クエリにて更新し 在庫表に反映させていきたいと思っています。 入庫表には、この先 在庫表にないものもでてくるので 在庫表にないものは 追加、あるものは、更新としていきたいです。 今の状態だと 入庫表のものは、更新クエリでいったん在庫表に反映されるのですが 入庫表にレコードを追加して また更新クエリをかけると 在庫表が、前に更新したレコードの分も 重複して反映してしまいます。 これをなくすには、どういった方法が ありますか? 宜しくお願いいたします

  • Accessのクエリの抽出式について

    アクセスの基本しか知らないため、質問がわかりにくいかもしれませんがお教えください。 AテーブルとBテーブルがあり、共通の商品コードがあるとします。 そしてAテーブルにあるが、Bテーブルにはない商品コードがあった場合に、その該当分だけ表示できるようにしたいのです。 これはクエリで、できるものでしょうか? クエリでできるとしたら、デザインビューの画面で言うとどこをどのように設定したらいいのか、わかりやすく教えていただけたら幸いです。 この問題が解決したら、続きでもうひとつ質問したいと思っています。申し訳ありませんが、よろしくお願いいたします。

  • Accessで倉庫管理

    お世話になります。 現在Accessで在庫管理作成中です。 テーブル: 入庫:品番 品名 グループ 数量 使用者 日付 出庫:品番 品名 グループ 数量 使用者 使用状態 日付 グループ:1 消耗品        2 道具       3 機械 クエリ 消耗品在庫:入庫(消耗品)-出庫(消耗品) フォーム: 入庫フォーム、在庫フォームと出庫フォームを作成しました。 在庫フォームはクエリの元で作成しました。 以上のように作りました。 やりたいことは出庫フォームを入力する時、消耗品なら、数量を入力して、一旦在庫を確認して出したい数は在庫があれば、入力できます。そうではない場合はエラーでます。 言葉がうまく説明できないですのでイメージとしては Select Case グループID Case 1 If 数量<「在庫フォーム」の数量 Then  そのまま入力出来ます。在庫が減って行きます。 Else エアー Message box”在庫は足りません” こんな感じでコードに書き換えられますか?コードが弱いですので助けて下さい。 よろしくお願いします。  

  • Access クエリについて

    Accessのテーブル1に、フィールド「コード」「回数」があり、レコードとして A,32 B,20 C,13 ・・・というように、ランダムなコードと回数がセットされているとします。コードは主キーです。 このテーブル1を元にしたクエリで A,1 A,2 A,3 ・・・ A,32 B,1 B,2 ・・・ B,20 C,1 C,2 ・・・ C,13 というように、コードごとに「回数」と同じ数のレコードがクエリ上に生成されるようにしたいのですが、こういうことは出来るのでしょうか?出来ればSQLで回答いただけないでしょうか。

  • Accessのクエリのデータ抽出のエラー?について

    お世話になります。 Accessのクエリでのデータ抽出について教えてください。 テーブルからフィールドを商品コードと出荷日の2つを選択し、 集計を使用して、商品コードでグループ化して、出荷日で最大にします。 すると、抽出条件で商品コードを指定すると抽出できるのですが、抽出条件で 指定せずすべてのデータを抽出すると出てこない商品コードがあります。 たとえば[A]という商品コードを抽出条件に指定すると抽出できるのですが、 抽出条件で指定せずすべてのデータを抽出するとこの[A]という商品コードが 抽出されません。 何が理由なのかお分かりになりましたらどうぞよろしくお願いいたします。 当方SQLがわかりませんのでクエリのデザインビューでご説明いただけますと 幸いです。

専門家に質問してみよう