- ベストアンサー
ACCESSの作り方
現在ACCESS2003で社員名簿を作ろうと思ってます。 やりたいことは ○ 社員1人ずつ住所、生年月日などを入力する ○ 社員本人だけではなく家族の分も同じく住所、生年月日などを入力する ○ 入力する順番はいろんな世帯があるのでバラバラになる(続けて同じ世帯の人を入力するとは限らない) ○ 最終的にその世帯の個人情報をまとめてレポートで表示させたい と、いうことで住所と苗字が同じなら一つの世帯とみなすように考えているのですが、これをどのように設定したらよいのかわかりません。 どなたか教えていただけませんでしょうか? どうかよろしくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
どうしてもひとつのテーブルで作りたいなら(私だったら) 社員ID 開始日 終了日 氏名 住所 電話 本人家族区分 続柄 親ID 扶養区分 扶養開始日 扶養終了日 ........ のような形で作ると思います。 レポートに一家族分表示させるためには、 以下のようなクエリで対応します。 SELECT 社員テーブル.社員ID, 社員テーブル.社員ID, 社員テーブル_1.氏名 FROM 社員テーブル LEFT JOIN 社員テーブル AS 社員テーブル_1 ON 社員テーブル.社員ID = 社員テーブル_1.親ID WHERE 社員テーブル.社員ID="1" AND 社員テーブル.社員ID="本人"; 一家族に二人の社員がいる際の扱い方や、一度退職して就職した際の運用方法を考えておく必要があります。 社員IDというものがないなら、適当に一意の番号を振ればよいと思います。
その他の回答 (6)
- nfushi
- ベストアンサー率31% (39/122)
No.3です。 [入力フォーム] ・名前[テキストボックス] ・住所[テキストボックス]] ・電話番号[テキストボックス] [管理フォーム] *社員選択* ・名前[コンボボックス] *家族選択* ・名前[コンボボックス] フォームは上記の2つ用意します。 通常は入力フォームを表示させ、作業者に入力を行わせます。 人テーブルへ入力情報を挿入します。 管理者フォームは限定された人しか見れないようにします。 ここで行うのは社員テーブルと戸籍テーブルへの登録。 管理フォームには社員選択と家族選択を別々に行います。 社員選択のコンボボックスのデータソースは入力テーブルです。 入力フォームで入力したデータがここに表示されます。 社員を選択して決定ボタンを押すと、社員テーブルに入力テーブルの人IDを挿入します。 家族選択欄では、社員選択欄で選択した社員に対しての家族を選択します。 例えば、「太郎さん」、「次郎さん」、「花子さん」が入力テーブルに登録されているとします。 彼らの人IDを仮に、0001、0002、0003とします。 まず社員選択欄のコンボボックスから「太郎さん」を選択します。 内部的な処理では0001を取得しておきます。 次に、家族選択欄のコンボボックスから「花子さん」を選択します。 決定ボタンを押すと、社員テーブルには[0001]が挿入され、戸籍テーブルには、人IDに[0003]、社員IDに[0001]を挿入します。
お礼
ありがとうございます。 今の私にとってはちょっと難しそうですが参考にさせていただきたいと思います。 またわからなければ教えてください。 ありがとうございました。
ANo5の WHERE 社員テーブル.社員ID="1" AND 社員テーブル.社員ID="本人"; ↓ WHERE 社員テーブル.社員ID="1" AND 社員テーブル.本人家族区分="本人"; でした。 申し訳ありません。
- neko_noko
- ベストアンサー率45% (146/319)
>○ 入力する順番はいろんな世帯があるのでバラバラになる(続けて同じ世帯の人を入力するとは限らない) >ちなみにテーブルの件ですが、できれば入力の段階では社員と家族の区別はつけず、一つのテーブルで全て入力していきたいと思っております。 この2つの発言から気になったのですが、 入力はフォームを作ってそこで、という風に考えていますか? それともテーブルに直接入力させようとしているのでしょうか? ※通常は前者で考えるのですが、もしや後者で考えているのでは、と邪推したもので。 それと、電話番号をキーにする話がありますが、 電話番号も以外に入力がブレやすいので注意が必要です。 ハイフンが入ったり、市外局番を省略して入力されたり… すると本来は同じ番号が簡単に別の番号になってしまうので注意が必要です。 「0123456789」と「01-2345-6789」は別番号と認識されます。 あと、引越した場合は電話番号が変わるので、その対応も必要です。 さらに言うと、社員はみんな自宅電話番号を持っていますよね? 携帯しか持っていない家庭の場合、家族でもそれぞれ番号が違いますから、 最悪、「社員名簿ができないから固定電話を引け」というムチャクチャな話になってしまう… 個人的には社員番号があればそれを使うのが良いと思います。 ※もし社員番号がない場合でも、許されるなら社員番号で管理するように変更していくことをお勧めします。 そうすれば、社員テーブルは社員番号を、家族テーブルは社員番号と続柄(妻、夫、長男など)を それぞれキーにする、といったことができます。(でも続柄を使うのも問題ありますね…) いずれにしても、やり方はいろいろありますので、実際に使った時に不具合の起きないようにすることが必要です。 余談ですが、 >住所と苗字が同じなら一つの世帯とみなす これは絶対NGです。 二世帯同居の場合、同じ住所でも苗字が異なる可能性があり、 家族と識別できないからです。
お礼
ありがとうございます。 現在フォームを一つだけ作っておりまして、そこで全ての入力をしたいと考えておりました。 今回は会社の諸事情で社員番号を使うことができない状態にあります。 ただ、続柄を使うのは問題ないのですが^^; 入力する者もデータを見る者もその世帯の誰が社員で誰が家族かはわからないようにしなければならないのです。 もしよろしければまた教えてください。 よろしくお願いいたします。
- nfushi
- ベストアンサー率31% (39/122)
解答の1つとして見てください [人テーブル] 人ID 名前 住所 生年月日 [社員テーブル] 人ID [戸籍テーブル] 人ID 社員ID 人テーブルには社員、家族関係なく人の情報を入れる。 名前、住所、生年月日を入力するフォームを作成し、人IDは連番でふらせます。(削除、修正はとりあえず考慮しない) 社員テーブルには社員の人IDのみを登録。 これは人テーブルにある名前をコンボボックスかなんかで選択させるだけのフォームを作成します。 このテーブルの代わりに人テーブルに社員フラグをつけるだけでも良いです。将来的に社員の情報をいれることを考えて別のテーブルにしました。 この2つのテーブルを利用して戸籍テーブルに登録するフォームを作ります。社員テーブルの一覧から一人を選び、人テーブルの一覧から複数人を選択させる(一人ずつでもいい)方法が考えられます。 (人IDは人テーブルから、社員IDは社員テーブルから) リレーションに使うのは人IDです。 電話番号や住所などは変わる可能性があります。 名前だって婚姻すれば変わります。 リレーションに使うのは一意に決まる普遍なものです。覚えておいてください。
お礼
ありがとうございます。 非常にわかりやすかったです。 今回、会社の諸事情により入力された人が社員なのか家族なのかわかるのはごく一部の者で、入力する者やデータを見る者はその世帯の誰が社員で誰が家族なのかはわからないようになっております。 ということは社員テーブルを作るのは難しいと思うのですがいかがでしょうか? リレーションに人IDというのは普遍的でよさそうですね。 もしよろしければまた教えてください。 よろしくお願いいたします。
- PXU10652
- ベストアンサー率38% (777/1993)
「ちなみにテーブルの件ですが、できれば入力の段階では社員と家族の区別はつけず、一つのテーブルで全て入力していきたいと思っております。」 一緒にしてしまうと家族データも住所を入力する必要が出てきてしまうので、意味がないのです。社員テーブルに氏名、住所、生年月日、自宅電話番号を入れます。それと別に家族テーブルを作り、そこには氏名、生年月日、自宅電話番号だけを入れます。 自宅電話番号は、世帯を識別するキーになるので、クエリーで両者を紐付け、社員に紐付いた家族を一緒にレポートとして出力できるようにするのです。(複数のテーブルを共通項目で結びつけて、重複データを極力減らし、情報を管理するのがリレーショナルデータベースの役割=存在意義ですから。) で、この説明や専門用語がちんぷんかんぷんの状態でしたら、Accessの入門本を読むことを強く推奨します。実現するにはテーブル、クエリー、入力用フォーム、レポートなどを作る必要があると思いますが、それをこのWeb上で文字だけで分かりやすく説明するのは、現実的ではないので、図解された解説書を参考にして欲しいと思います。
お礼
ありがとうございます。 実は諸事情がございまして、社員かどうかわかるのはごく一部の人間で、入力する者や実際にデータを見る者は誰が社員で誰が家族かはわかりません。 ですので入力は一つのフォームで行い、多少重複しますが住所、電話番号なども全て入力する形をとりたいと思っております。 その上でバラバラに入力された情報の中から世帯ごとにまとめていきたいと思っております。 最低限のテーブル、クエリー、入力用フォーム、レポートなどを作ることはできるのですが、複雑になってくるとどのように設定したらよいのかわからなくて質問してしまいました。 もしよろしければまた教えてください。 よろしくお願いいたします。
- PXU10652
- ベストアンサー率38% (777/1993)
基本的には、社員だけのテーブルと家族だけのテーブルに分け、クエリーで両者間を結びつければよいと思いますが、そのリレーションには、自宅の電話番号を使うのが良いと思います。住所では表現が異なったり、名字でも旧字体があったりしますので、電話番号で紐付けるのが良いと思います。ですの、家族データは氏名と生年月日と自宅電話番号だけを入力すれば良いと思います。 この段階で、「クエリーって何?」「リレーションって何?」ということであれば、自分のレベルに合った参考書の購入をお勧めします。
お礼
アドバイスありがとうございます。 住所ではなく電話番号で結びつけるのですね! そのほうが一つで済むので簡単ですね。 ありがとうございます。 ちなみにテーブルの件ですが、できれば入力の段階では社員と家族の区別はつけず、一つのテーブルで全て入力していきたいと思っております。 ですので、この場合ではひたすら入力をして、電話番号が一致するものを一つの世帯とみなしてまとめて表示させるということなるのでしょうか? だとすると、それには一体どのようにするとよいのでしょうか???
お礼
ありがとうございます。 参考にさせていただきます。 またわからないことがあれば教えてください。 よろしくお願いいたします。