今日の記事は、「社員一覧」などから、条件や番号を抽出した時に、あるはずのレコード(記録)が、出てこないときは、思わぬところに入力漏れがあるんじゃない?
という記事です。
抽出方法や、式の書き方についは記事にしていませんので、関数や条件式について知りたかった方は、そっと他のサイトか、アクセスの本で調べてみてください。
初心者や、しばらくアクセスを触っていなかった方向けの記事です。
気になる方は、読んでみてください。
例えば、連番で抽出したのに、欠番がある
例えば、アクセスで社員のデータベースを作ったとしましょう。
全社員の名簿から、A部署の社員一覧を抽出するとか、社員番号100~150までの名簿を作成する等で、条件を指定して抽出した時に、何故か欠番が出る時があります。
元のテーブルを確認しても、名前のデータはしっかり入力してあるのに、何故か、抽出すると出てこない・・。
また、商品管理のデータベースで、受付や出荷の入力をちゃんとしたのに、何故か一覧に反映されないという事も・・。
データとしてはちゃんと存在するのに、幽霊のようにレポートやクエリに反映されない・・。
原因は色々ありますが、抽出をかけるときにエラーメッセージが出なければ、多くの場合は、データソースとなる元テーブルの、入力漏れが原因となっている場合があります。
※ 日付を指定して抽出した場合、元データの日付が間違っている場合もあります!
クエリは複数のテーブルからできている
入力漏れって言っても、ちゃんと入力したし、データはあるんだけど・・。
という方のために。
アクセスでデータを入力する場合、多くは、短いテーブルをいくつもくっつけてクエリを作り、一つのデータにすることがほとんどです。
一つのテーブルからクエリを作ってデータを抽出する場合もありますが、あまりそういうことはありません。
ファイルを共有して数人で入力をする場合、フォーム入力をすることが多いと思いますが、最終的にデータを抽出するまでに、段階的に、いくつものフォームを経由する場合があります。
例えば・・・
① 注文受付日と、商品名、注文者や金額等を受付フォームから入力。
② 商品出荷日を別の出荷専用フォームから入力。
③ お金が振り込まれたら、決済日と金額を、未決済フォームから入力する。
④ 決済が終了すると、未決済フォームからデータは消える。
⑤ 一覧出力フォームから条件を指定すると、月ごとや、購入者ごと、未決済一覧等が出力される。
こんな場合、 データはいくつものテーブルを結合させていると考えられます。
上のような場合、「出荷した時に急いでいて入力を忘れ、決済が終了した後、決済日と金額は入力した。」
なんていう場合が考えられます。
または、フォームに現れない根本的な部分で入力漏れをしていることも考えられます。
商品管理の場合は、商品コード(数字)や商品のカテゴリーコード(数字)、それに商品名(かな・漢字)をプラスしたものが一つのテーブルになる事が多いと思います。
こんな時、商品を登録する時に、カテゴリーコードのような、どこか小さい所を入力し忘れていたという事も考えられます。
自分が入力しているクエリやフォームに、商品カテゴリーの欄が表示されていなければ、一見しただけでは、入力漏れがあったなんて、誰も気づかないのです。
抽出をかけた時、あるはずのないデータが出てこないというのは、入力したつもりでも、例えば、受付日や商品コードを入力していても、ちょっとした所を空欄にしていたなんていう、「そんな事!」と言ってしまいそうな凡ミスが原因の事が多々あります。
空欄を許さないプロパティや、空欄がある場合に警告を出すマクロを組めば、未入力は最小限に抑えられますが、急場しのぎで作ったり、できて間もないファイルだったりすると、ミスを抑えるための警告等は後回しになるので、入力漏れが発生しやすくなります。
人間ですから・・。
と、いうか、先日作り直したクエリで、久々に自分でやらかした実際の体験です(恥)。
クエリから入力漏れを探す
さて、それではどこの部分に漏れがあるのか探さないとなりません。
まずは、出力した一覧のもととなっているクエリを確認してみましょう。
分からない場合は、データソースとなっているテーブルをひとつづつ見て、入力漏れを探します。
クエリデザインを開くと、こんな感じになっていると思います。
本当は、もっと蜘蛛の巣のように糸が繋がっていると思うんですが、この、蜘蛛の糸に注目してください。
この、蜘蛛の糸のようなものを「リレーション」と言いますが、この「リレーション」には、いくつかパターンがあります。
何も印がないものもあれば、変な印がついていたり、矢印があったりするものもあります。
この場合は、両方のフィールドにデータがある場合のみ、クエリに反映される
こんな感じで、リレーションに特に表示がない場合、結合させたフィールドの両方にデータがある場合のみ、クエリに反映されます。
どちらかに入力漏れがあった場合、そのデータはクエリには出てこなくなります。
例えば・・・
テーブルA : 商品名とカテゴリーコード(数字)
テーブルB : カテゴリーコードとカテゴリー詳細(美容とか文具とかの、かな漢字)
→ この2つのテーブルをつないでクエリを作ると、カテゴリーコードの数字を入力すれば、商品カテゴリーの詳細がフィールドに表示されるという、エクセルでいう所のV-Lookupが関数なしで実現できます。
ただし、このつなぎ方の場合は、両方のテーブルの同じフィールドに値がなければ、クエリには反映されません。
という事は、どちらかに入力漏れがあるデータは、データとして表示されないという事です。
抽出をかけて、あるはずのデータが出てこないときは、こんな時です。
思いがけない所に入力漏れがないか、探してみましょう。
リレーションのプロパティを変えると、入力漏れの値を表示させることができる
実は、リレーションのプロパティを変えると、入力漏れがあっても 値を表示させることはできるのですが、この話はまた別のお話なので、詳細は割愛しますが、少しだけ説明します。
超ざっくりと説明すると、クエリのリレーション部分を右クリックしてみます。
すると、リレーションのプロパティが出るので、この部分を、「両方のテーブルの結合フィールドが同じ行だけを含める」から、「Aテーブルの全レコードと同じ結合フィールドのレコードを含める」に変えると、Aテーブルの値は全て表示されます。
クエリデザインに表示されるリレーションは、このようになります。
ただし、リレーションのプロパティを何でもこの形にしてしまうと、結合型があいまいなためクエリが作れなかったり、エラーが出ることもあるのでご注意ください。
条件式が間違っていれば、メッセージが出るか、一目でわかる
抽出がうまくいかないと、『条件式が間違っているのだろうか?』と思いがちですが、条件式が間違っている場合は、たいていエラーメッセージが出るか、一目で『こりゃ間違ったな』というデータの抽出具合になります。
アクセスのエラーや、望み通りの抽出ができないことは結構ありますが、難しいエラーだけではなく、凡ミス程度の入力漏れが原因の時もありますから、突然何かができなくなった時は、焦らず確認してみてください。
今日の記事は以上です。
読んでいただき、ありがとうございました。