<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 MS-Access97大魔法陳列棚>クエリ牧場



【仕 様 な ど】MS-Access97で作成。Windows95でのみ動作確認。

【ダウンロード】←Zip形式
            (解凍後、mdb初期状態:およそ3,360KB)

【主 な 機 能】

データ抽出方法のサンプル集です。


【作 り 方 等】

大きなテーブルから指定した情報だけ取り出すためのさまざまなクエリーや、その他のデータ抽出方法をまとめて盛り込んだデータベースです。いちおう、とある倉庫の出庫処理を想定しています。

[出庫伝票入力画面]と[製品登録画面]で、データを入力するときに役立つ方法をいくつかご紹介。これらのフォームが基にしているテーブルには、それぞれ約2万件、約1100件のレコードが入力されていますので、データ抽出のレスポンス等の参考にもしていただけると思います。

[クエリーによる抽出]で、日付、文字列、数値を使ったさまざまなクエリーサンプルをご紹介。

いろいろ小細工していますので、皆さんのデータベース作成の参考になればと思います。


盛り込んでいる機能をいくつかご紹介します。


<1>出庫伝票入力画面

こんな画面です。

伝票番号を自動的に裁判します。
2 基本的に手入力ですが、ワカラナイ場合は"R?"と入力してEnterキーを押すことで、Rで始まるレコードの一覧が出てきます。
3 製品ナンバーが入力されると、品名と製造元が表示されます。レコードソースでないテーブルから、DLookup関数を使って探しています。
4 [Q_出庫数計算]と[Q_在庫数]というふたつのクエリーで在庫数を計算し、DLookupを使って表示しています。
5 閉じるときのイベントで、製品ナンバーがNullのレコードを削除しています。

処理はぜんぶイベントプロシージャで作ってあります。

フォームは基本的に、基にするレコードソース(テーブルやクエリーなど)はひとつです。
しかし、上のような伝票入力画面を作っていると、どうしてもレコードソース以外のテーブルやクエリーから、値を取ってきたい・・・と思うことがあります。
いろいろな方法がありますね。他のサンプルでも何度かご紹介していますが、コンボボックスを利用するのもひとつの方法だと思います。
フォームを別にもうひとつ作ってならべて使うというのも有効です。

ただ検索してくるだけで、エラー処理などを細かくしなくてもよいなら、DLookup関数ってなかなか使えますよ。ただし、3)と4)では、表示されるまでの時間がことなります。在庫数は、「出庫テーブルを製品ごとにグループ化して出庫数を集計して」「製品マスターの期初在庫数から引き算」して、そこからLookupしているので、反応は悪いです。

もっとすばやく在庫数を表示させたいなら、あらかじめテーブル作成クエリーをタイミングよく動かして、現在庫数を参照できるテーブルを作っておき、そこからLookupするとよいでしょう。


で、この画面から、製品ナンバーの検索をする仕組みを作ってみました。

製品は現時点で1100種類以上登録されています。効率よく探すには・・・ということで、苦肉の策。製品ナンバーのアタマ1文字だけわかっている場合、を想定して作りました。
A?と半角で入力してEnterキーを押すと、別の画面が出てきて参照できるようにしてみました。

製品ナンバー。品名の方は使用不能状態にしてあるので、
キーボードの上下矢印キーでフォーカスの移動が可能です
Enterを押すと、その製品ナンバーが上の入力画面に反映されるようにしています。
「よし、マウスを使わないでできるだけやってみよう」と決意し、
ここではKeydown時のイベントというのを使ってみました。

けっこうややこしいことやってます。
Enterキーを押すと、このフォームは閉じられるので、
とりあえずここまではマウスを使わずに操作が可能だと思います。
月並みですが、検索結果、何件存在しているか、Count関数を使っています。


もうひとつ、似たような画面で、製品マスターへの登録画面を作ってみました。

<2>製品登録画面

こんな画面です。

製品マスターはフィールドが多いので、タブを使って3ページ分に分けてみました。
自作の移動ボタンです。ボタンには、Accessのピクチャ(右手、左手)を使ってみました。真ん中には、「現在のレコード番号/総レコード数」を出しています。これがなかなかタイミングが難しい。。。
このボタンをクリックしたときだけ、フォーム内の値の変更ができるようにしています。
フォームには「追加の許可」「更新の許可」「削除の許可」というデータプロパティがあるので、この中にTrue/Falseという値を美味く代入して、やたらとデータの書き換えが行われないようにしてみました。


そして、これらの画面から入力された情報は、以下のようなテーブルにたまっていきます。

[出庫テーブル]

[製品マスター]

この他にも、部門や取引先関連のテーブルがいくつか用意されています。

これらのテーブルから、必要なデータだけ取り出すクエリーのサンプルを、いろいろご紹介しています。


<3>クエリーによる抽出

【日付関係】

Q_昨年の伝票

[出庫テーブル]の[伝票日付]を基に、昨年入力された伝票だけ取り出すクエリーです。Detapart関数を使って、伝票日付から年(YYYY)の部分だけ取り出して抽出条件にしています。

Q_伝票月で抽出

[出庫テーブル]の[伝票日付]を基に、今月(または指定した月)に入力された伝票を取り出すクエリーです。これはMonth関数を利用しています。

Q_四半期

[出庫テーブル]の[種別]ごとに出庫数を集計します。その際、さらに1年を4期に分けて集計しています。

Q_90日前

Dataaddという関数を使って、今日から90日前までに入力された伝票をふりかえるクエリーです。


【文字列関係】

Q_生産中止

Yes/No型のフィールドの表示方法を変更するクエリーです。Yesなら「生産中止」と表示させます。

Q_3つの条件

フォームから3つの抽出条件を指定します。条件が空っぽの場合は無視するようにしています。

Q_3桁め

[製品マスター]の[製品ナンバー]の3桁めの値を基準にしてデータを取り出すクエリーです。

Q_ひとつに

[製品マスター]の[製品ナンバー]と[追番]をくっつけて、ひとつのフィールドを作ってみました。


【数値関係】

Q_在庫チェック

[製品マスター]には、[必要在庫数]という値を設定して、発注の目安にしています。棚卸し後、期初の時点ですでに必要在庫を下回っている製品をピックアップします。

Q_金額

出庫数に単価をかけて、金額を求めています。

Q_値上げ

[製品マスター]のうち、単価が2000円未満の製品をピックアップし、それぞれ単価を1.1倍しています。

Q_出庫ランキング

今年もっとも出庫数の多かった製品をピックアップし、上位20位までを表示します。

Q_グロス

[製品マスター]の期初在庫数を、144個ずつ箱にまとめたとして、箱数と端数を求めます。


【集計もの】

QXクロス集計

クロス集計クエリーウィザードを使って作ったクエリーのサンプル。(2種類あります)

ランクの数を数えろ

集計はクエリーで十分に行えますが、VBAでも挑戦です。
[製品マスター]の[工程ランク]というフィールドに、何がいくつ入力されているか、かぞえてワークテーブルに書き出しています。


クエリーの出力結果は、すべてデータシートビューです。表示用のフォームなどは作成していません。サンプルですので・・・ご了承ください。