• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessで後々データを追加したい)

Accessで後々データを追加したい

このQ&Aのポイント
  • Access2007を使用して、出向社員の契約情報を管理する方法について相談しています。
  • 質問者は所属部署や担当ポジションなどの固定データはテーブル化できているが、更新回数や累積契約年月数のような未確定のデータの管理ができていないとのことです。
  • すでにAccessの基本的な機能や使い方について理解しているが、問題の解決には至っていないと述べています。

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

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.3

#1補足について。 基本的にはその考えで良いと思いますよ。 (「名簿」となるテーブルに[氏名]を持つのであれば、  「契約状況」には[氏名]は要らない、とか、細かいツッコミはありますが。) ついでですから簡単に。一緒に手を動かしてみてくださいませ。 テーブルはとりあえず二つ作ります。 [名簿] ・社員ID(主キー)・・・長整数型(表示形式:"0000") ・氏名・・・テキスト型 (テストデータ) 社員ID  氏名 0001   山田一郎 [契約状況] ・社員ID・・・長整数型 ・契約開始日・・・日付/時刻型 ・契約満了日・・・日付/時刻型 ・所属部署・・・テキスト型 (デザインビューで[社員ID][契約開始日]を選択した状態にして  主キーを設定してやると、主キーの鍵マークが二つ付きます。  これで、重複を防ぐことができます。) (テストデータ) 社員ID  契約開始日   契約満了日   所属部署 0001   2011/04/01   2012/03/31   経理部 0001   2012/04/01   2013/03/31   総務部 0001   2013/04/01   2014/03/31   総務部 [所属部署]を[契約状況]テーブルに持って行ったのは単なる趣味です。 でも、こうしておけば後々なんだかんだ便利なような気がします。 (現在の所属部署と、以前の所属履歴を比べてみたり。) これを基にクエリを作ります。 クエリを新規作成し、空のままで「テーブルの選択」を閉じ、SQLビューにして、 SELECT 名簿.社員ID, 名簿.氏名, 契約状況.所属部署, Min(契約状況.契約開始日) AS 契約開始日の最小, Max(契約状況.契約満了日) AS 契約満了日の最大, DateDiff("m",Min([契約開始日])-1,Max([契約満了日])) AS 累積契約年月, IIf(Max([契約満了日])>Now(),"契約期間中","契約満了") AS 契約状況, Count(契約状況.[契約開始日]) AS 契約回数, [契約回数]-1 AS 契約更新回数 FROM 契約状況 INNER JOIN 名簿 ON 契約状況.社員ID = 名簿.社員ID GROUP BY 名簿.社員ID, 名簿.氏名, 契約状況.所属部署; コレを貼り付けてやります。 デザインビューにしてご確認くださいませ。 クエリが出来上がっているはずです。 これをデータシートビューで見てやると、添付図のように出来上がります。 お試しくださいませ。

misora82
質問者

お礼

できました!ありがとうございます!! ご丁寧な解説助かりました。これを元に頑張ってデータベースを構築していきたいと思います。

その他の回答 (3)

回答No.4

補足:列"出向履歴.期間"を提示した意図。 「弊社の出向社員の雇用状況を管理したい」のシステムへの反映が"累積契約年月数"であることに対しての疑問を提示したつもりです。 出向期間=開始日-終了日 この場合、出向期間の値は日数で戻されます。つまり、その値は月数ではないということです。普通に考えて、かかる値から"累積契約年月数"を求めるのは至難。この問題点を示唆したつもりです。 もう一つは、"期間"をデータ入力時に求めておけば、その累積を求めるのは至極簡単。そういう質問者の力量とマッチしたテーブル設計というのも示唆したつもり。 ちょっと、補足しておきます。

misora82
質問者

お礼

補足ありがとうございます。 データベース作成の際に考慮して組んでみたいと思います。

回答No.2

【出向社員簿】 id 所属部署_id・・・・・・【所属部署名】参照 担当ポジション_id・・・【担当ポジション名】参照 氏名 [所属部署_id]、[担当ポジション_id]をも正規表現するのかどうか?そこは、それぞれの作法というか好みの問題。 【出向履歴】 id 出向社員簿_id・・・・・ 【出向社員簿】参照 出向名 開始日 終了日 期間 テーブル【出向履歴】に[開始日]と[終了日]から求められる[期間](月数)を2.02ヶ月などと記録。[累積契約年月数]と[更新回数]はSQL文で。列[期間]をもSQL文で求めるかどうかは、それぞれの作法というか好みの問題。 1、出向履歴管理フォーム。 2、出向履歴参照フォーム。 "出向履歴.id"_____「出向履歴管理フォーム」で履歴を入力順に表示する為の列。 "出向名"__________履歴を出向名で検索、区別するのであれば・・・。 開発すべきフォームは、上記の二つ。 こんな感じが手始めの構想かと思います。

misora82
質問者

お礼

SQLは慣れてきたら導入してみようと思います。ありがとうございます。

misora82
質問者

補足

回答ありがとうございます。 申し訳ありません、SQLは不勉強で分かりません・・・。 Accessの基本機能しか使えないド素人でございます(涙

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

ごくごく簡単に考えて、 「契約状況」を蓄積しておくテーブルを作ってみてはいかがでしょう? で、クエリでまとめれば一覧もできますし、 契約開始日の最小値~契約満了日の最大値で演算してやれば 累積契約年月数も出せますし、 レコードの数から更新回数も出せます。 > そもそもAccessじゃ無理!という場合もあるかと むしろ、アクセスの得意分野だと思いますよ。 エクセルに任せる方が後の処理が面倒です。 (と、私は思います。)

misora82
質問者

お礼

1回の契約=1レコードというのが使えるんじゃなかろうか、というところまでは考えたのですが レコード数=契約更新回数というところと、MAXとMINを引けば累積が出るという点については思いつきませんでした。 目からうろこでした。 (Accessベテラン様からすればナンデヤネンかもしれませんが(汗) 最終的にはフォームを使って全部のデータ(新規の出向社員の登録~契約更新まで)を入力できるようにしたいと思います。 ありがとうございました。

misora82
質問者

補足

ご回答ありがとうございます。 理解力が足りないため、追加で質問させていただきたいのですが、契約状況用のテーブルというのは下記のようなものでしょうか? 社員番号  氏名   契約開始日  契約終了日 12345   A田B男  2012/7/1   2013/4/30 12345   A田B男  2013/5/1   2014/6/30 ・ ・ ・ これでクエリを作成して、A田さんの最後の契約終了日と最初の契約開始日の差を累積契約年月数とする。 A田さんのレコードの数=契約更新回数。 要するに1回の契約=1レコードという理解でしょうか。

関連するQ&A