• 締切済み

Access データの年度更新について 

いつも大変お世話なっております。Accessを始めて2週間の初心者です。 今、テーブルにレコードを追加していき、下記のような処理を行いたいのですが どのように構築したらいいのかわかりません。質問の仕方もうまくないので恐縮です。 どのようにというのは、例えばクエリの作り方もそうですし、クエリのためのテーブルを 作らなければ実現できない・・等、イメージが沸きません。 社員コード(社員CD)と資格名の過去の履歴のテーブル(TBL_資格期間一覧)があります。 社員No(社員数)は数百、また資格名の過去履歴は各社員によって異なるのでレコード数 は個々に異なります。 社員CD   期間開始   期間終了   資格名 001234   2004/07/01  2008/03/31   S4 001234   2009/04/01  2016/03/31   S3 001234   2016/04/01  2017/03/31   S2 056789   2010/04/01  2012/03/31   T6 056789   2012/04/01  2014/03/31   T5 056789   2014/04/01  2015/03/31   T4 056789   2015/04/01  2017/03/31   T3   ・        ・        ・       ・ 次年度、001234さんはS2からS1に昇格した場合 001234   2017/04/01  2018/03/31   S1 が追加される。 次年度、056789さんはT3のまま変わらない場合 期間終了フィールドが次年度末に更新され、2018/3/31になる。 結果、TBL_資格期間一覧を下記のようにしたいと思っています。 社員CD   期間開始   期間終了   資格名 001234   2004/07/01  2008/03/31   S4 001234   2009/04/01  2016/03/31   S3 001234   2016/04/01  2017/03/31   S2 056789   2010/04/01  2012/03/31   T6 056789   2012/04/01  2014/03/31   T5 056789   2014/04/01  2015/03/31   T4 056789   2015/04/01  2018/03/31   T3   ←更新される  001234   2017/04/01  2018/03/31   S1   ←追加される   ・        ・        ・       ・ TBL_資格期間一覧を開いて、全社員分をマニュアルで日付を入力していく、レコードを追加 していくといった工数をかけられないので、 (1)資格変更のない社員は、自動で更新される (2)資格変更のある社員は、TBL_資格変更 に社員CDと資格名を入れることで レコードが  追加される といった処理をさせたいと思っています。 お力添えいただけないでしょうか? 宜しくお願い致します。

みんなの回答

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.1

問題点を把握しきれませんので、回答じゃありません。 1.テーブルにレコードを追加していき _テーブルはどのようなものを想定してますか _社員テーブル(ID、社員名、社員CD、) _資格テーブル(ID、資格名、) _資格履歴テーブル(資格取得日、社員ID、資格ID、資格ランク) __ 重複登録を避けるため 資格取得日、社員ID、資格ID、資格ランクの4フィールドに主キー定義 _最新資格テーブル(資格取得日、社員ID、資格ID、資格ランク) __社員ID、資格IDの2フィールドに主キー設定 2.どのように構築したらいいのかわかりません。 どのようにというのは、例えばクエリの作り方もそうですし、クエリのためのテーブルを 作らなければ実現できない・・等、イメージが沸きません。 _先ずテーブルの構築から始めます。 3.社員コード(社員CD)と資格名の過去の履歴のテーブル(TBL_資格期間一覧)があります。 社員No(社員数)は数百、また資格名の過去履歴は各社員によって異なるのでレコード数 _資格ですよね、役職のような気がしますが。 _資格は普通期間開始ではなく取得日ではないでしょうか _また資格は多くの場合取得すると永久不滅では…期間終了は意味がない 社員CD   期間開始   期間終了   資格名 001234   2004/07/01  2008/03/31   S4 001234   2009/04/01  2016/03/31   S3 001234   2016/04/01  2017/03/31   S2 056789   2010/04/01  2012/03/31   T6 056789   2012/04/01  2014/03/31   T5 056789   2014/04/01  2015/03/31   T4 056789   2015/04/01  2017/03/31   T3   ・        ・        ・       ・ 次年度、001234さんはS2からS1に昇格した場合 001234   2017/04/01  2018/03/31   S1 が追加される。 次年度、056789さんはT3のまま変わらない場合 期間終了フィールドが次年度末に更新され、2018/3/31になる。 結果、TBL_資格期間一覧を下記のようにしたいと思っています。 社員CD   期間開始   期間終了   資格名 001234   2004/07/01  2008/03/31   S4 001234   2009/04/01  2016/03/31   S3 001234   2016/04/01  2017/03/31   S2 056789   2010/04/01  2012/03/31   T6 056789   2012/04/01  2014/03/31   T5 056789   2014/04/01  2015/03/31   T4 056789   2015/04/01  2018/03/31   T3   ←更新される  001234   2017/04/01  2018/03/31   S1   ←追加される   ・        ・        ・       ・

vesper580109
質問者

お礼

chayamatiさん ご回答ありがとうございます。更新クエリ、追加クエリを組み合わせ、なんとか得たい結果が出せました。資格→資格級若しくは総合職2級とか、一般に通じる表現で質問する必要があるな・・と勉強になりました。 ありがとうございました。

関連するQ&A

  • フォーム内のテキストボックスに複数レコードを表示

    いつも大変お世話なっております。Accessを始めて3週間の初心者です。 今、社員の在籍中の職級推移を残すための社員明細フォームを作成しています。 社員数数百名。 フォーム名:社員明細 テーブル名:TBL_職級期間一覧 テーブルには 以下のようなレコードが並んでいます。 IDはオートナンバー型を振っています。 年度が替わって、職級が変化すればレコードが追加されます。 (ID 586のように001234 さんのレコードが追加)  ID  社員No    開始     終了    職級名  1  001234  2004/04/01 2008/03/31   S3  2  001234  2008/04/01 2012/03/31   S2  3  001234  2012/04/01 2015/03/31   S1  4  005678  1998/04/01 2003/03/31   T6  5  005678  2003/04/01 2005/03/31   T5  6  005678  2005/04/01 2013/03/31   T4  7  005678  2013/04/01 2016/03/31   T3  ・  ・  ・ 586  001234  2015/04/01 2016/03/31   K5 これらを添付写真のようにフォームに表示させる方法がわかりません。 IDを振ったのは社員Noで絞り込み、昇順・降順で表示させる順番を 推移の新しい順、古い順に可変させられるのでは・・?と思ったので IDフィールドを付けました。 いろいろ検索し=DLOOKUPを使ったりと試してみましたが、よくわかり ませんでした。 何卒お力添えをお願い致します。

  • 更新クエリでの抽出条件の設定がわかりません

    お世話になります。 Access2010を使っています。 今、TBL_1の社員コードの中で、期間2の日付を、TBL_2の日付フィールドの 値に置換したいです。 TBL_1はIDをオートナンバーで振っており、置換したいレコードは社員コードID値が最大の レコード内の期間2フィールドになります。TBL_2は全社員コードはなく、社員 コードがある場合のみTBL_1の期間2を置換します。 テーブル1名:TBL_1 ID 社員コード 期間1   期間2   1  00123   2012/6/30  2014/3/31 2  00123   2014/4/1   2015/3/31 3  00456   1995/9/15  2008/3/31 4  00789   2001/6/2  2013/3/31  ・ 10 00456   2008/4/1  2016/3/31  ・ 30 00789   2013/4/1  2015/3/31  ・ 50 00123   2015/4/1  2017/3/31  ・ テーブル2名:TBL_2 社員コード 日付      00123   2016/10/31  00456   2015/5/20 上の例では結果として、 IDが10のレコードの期間2を2015/5/20に置換します。 IDが50のレコードの期間2を2016/10/31に置換します。 テーブル1名:TBL_1 ID 社員コード 期間1   期間2   1  00123   2012/6/30  2014/3/31 ←変わらない 2  00123   2014/4/1   2015/3/31 ←変わらない 3  00456   1995/9/15  2008/3/31 ←変わらない 4  00789   2001/6/2  2013/3/31 ←変わらない  ・ 10 00456   2008/4/1  2015/5/20 ←期間2:2015/5/20に  ・ 30 00789   2013/4/1  2015/3/31 ←変わらない  ・ 50 00123   2015/4/1  2016/10/31 ←期間2:2016/10/31に 更新クエリを使えばいいと思っていますが、抽出条件をどのように 書いていいのかわかりません。 恐れ入りますが、宜しくお願い申し上げます。

  • 条件指定の特定レコードのフィールド値の差をとりたい

    お世話になります。 テーブル1(TBL_1)の社員コードそれぞれにおけるレコードのフィールド値のデータ1と別テーブル(TBL_2)のデータ2との差をとる方法が知りたいです。差をとりたいレコードは以下の条件によります。 ・テーブル2の期間1と期間2の範囲にはいっているテーブル1のレコードのみ差をとる。 ・データ1とデータ2の差がマイナス(-)になることはありません。 ・社員コードは百程度、レコード数は数千にのぼります。 ・フィールドの期間1と期間2は同一社員コードにおいて重複することはありません。 ・テーブル2(TBL_2)は年度をまたいでの期間設定は基本しません。年度をまたぐ場合はレコードを増やします。 テーブル1名:TBL_1 社員コード 期間1   期間2   データ1 00123   2012/6/30  2014/3/31  30 00123   2014/4/1   2015/3/31  100   00456   1995/9/15  2008/3/31   15 00789   2001/6/2  2013/3/31  224  ・ 00456   2008/4/1  2016/3/31  628  ・ 00789   2013/4/1  2015/3/31  1089  ・ 00123   2015/4/1  2017/3/31   95  ・ テーブル2名:TBL_2 社員コード 期間1     期間2  データ2 00123   2012/11/6  2013/3/31   5 00123   2013/4/1   2013/11/5   13 00456   2013/6/12  2013/10/6   22 00789   1995/6/7   2000/2/11   6 具体的には、上記例においてテーブル1を下記の結果にしたいです。 テーブル1名:TBL_1 社員コード  期間1    期間2     データ1 00123   2012/6/30  2014/3/31    12 ←30-(5+13)=12 00123   2014/4/1   2015/3/31   100 ←変わらない 00456   1995/9/15  2008/3/31    15 ←変わらない 00789   2001/6/2   2013/3/31   224 ←変わらない  ・ 00456   2008/4/1   2016/3/31   606 ←628-22=606  ・ 00789   2013/4/1   2015/3/31  1089 ←変わらない  ・ 00123   2015/4/1   2017/3/31   95 ←変わらない  ・ なにとぞお力添えをお願い致します。

  • アクセスのテーブル更新について

    アクセスのテーブル更新について ------------------ テーブル1 性  名   フラグ 地域 佐藤 太郎 1 鈴木 次郎 9 高橋 三郎 3 ------------------ テーブル2 地域 フラグ 関東 1 関西 2 海外 3 ------------------ テーブル3 性  名   フラグ 地域 田中 四郎 2    関西 ------------------ アクセス初心者です。エクセルはファイル操作のVBAをモタモタしながら組める程度です。 上記1から3のテーブル(以下T)がある場合の、以下2つの処理を行う方法が分からず困っています。 処理1 T1の地域とT2の地域の内容が異なった場合、T1の地域にT2の地域の内容を書き込む 処理2(処理1実行後) T1のフラグが9以外のレコードをT3に追加し、追加したレコードをT1から削除する 上記処理は追加クエリや更新クエリで実行出来る内容でしょうか? VBAの記述が必要な内容でしょうか?そこからして分かっていません。 具体的な処理方法という形で教えて頂けたらと思います。 どうか宜しくお願いします。

  • マスタデータ更新

    こんにちは。 システム開発の基礎的なところがわからないので、教えていただきたく、投稿させていただきます。 システム開発をほとんどやったことがないので、言葉が変なところもあるかと思いますが、宜しくお願いいたします。 サーバー上に、AというSQLServerのDBがあります。 今までは、システム管理者のみがAccessからA.DBのリンクテーブルを使い、マスタデータの更新/追加/削除を行っていましたが、今後、リーダークラスの人もできるようにしたい!という要望があり、そのインターフェース部分を作成しています。 いろいろと考え、フロントエンド側にAccessでB.mdbを作成し、そこには、A.DBと同じテーブル構造の一時TBLを作成し、B.mdbを開いた時にA.DBから全データを取得することにしました。(取得するところまではできています) ここから、設定するための画面作成をしますが、最終的に、更新/追加/削除されたデータは、どのようにA.DBにUPすればいいのでしょうか? 考えた方法として (1)B.mdb内に、一時テーブルとは別に、更に同じ構造の変更用テーブルを作成。 設定画面から更新/追加/削除されたデータは変更用テーブルに保存し、全ての処理が終了したら、変更用テーブルにあるデータを1つづつ見て、A.DBへ更新/追加/削除をかける (2)一時テーブルのデータを直接更新/追加/削除し、全ての処理が終了したら、全テーブルのレコードを1件づつ比較し、A.DBへ更新/追加/削除をかける というくらいしか思いつかないのです。 その他に思ったのが、一時テーブルもしくは変更用のテーブルに、レコード毎に「更新/追加/削除」がわかるようにフラグを設けて、そのフラグに従ったSQL文を発行する というくらいです。。。 根本的に、マスタデータに対する更新/追加/削除のやり方が間違っていたりしますか? 誰も聞ける人がいないので、どうぞ宜しくお願いいたします!!!

  • Accessの更新クエリについて質問です。

    よろしくお願いします。 集計したクエリを元に更新クエリを実行すると、更新できません。 やりたい作業としては、売上データテーブルのレコード数を得意先ごとにカウントして、得意先マスタテーブルのレコード件数フィールドを更新する作業です。 追加クエリで一度テーブルに追加してから、テーブル同士で更新も考えたんですが、レコード数が多いためにDBのサイズが爆発的に増えて廃案になりました。 何か良い方法があれば教えてください。

  • [Access]時間帯の重複チェック

    下記のようなテーブルがあって、時間帯がかぶっているレコードを クエリで抽出したいと考えております。 ≪tbl_配置一覧≫ ID  日付    勤務地  開始時間 終了時間  担当者 1  2009/9/2   東京   10:00  12:00  Aさん 2  2009/9/2   東京   13:00  14:00  Aさん 3  2009/9/2   神田   12:30  14:00  Bさん 4  2009/9/2   神田   09:00  11:00  Aさん ID1と4のように同じ担当者が時間帯がかぶる形で勤務予定となっている場合、このレコード二つをクエリで抽出したいと考えております。 いろいろ探して下記のようなSQL文を書いてみたのですが、どうもうまくいきません。 SELECT tbl_配置一覧.ID, tbl_配置一覧.日付, tbl_配置一覧.勤務地, tbl_配置一覧.開始時間, tbl_配置一覧.終了時間, tbl_配置一覧.担当者 FROM tbl_配置一覧, tbl_配置一覧 AS tbl_配置一覧_1 WHERE (((tbl_配置一覧.ID)<>[tbl_配置一覧_1].[id]) AND ((tbl_配置一覧.日付)=[tbl_配置一覧_1].[日付]) AND ((tbl_配置一覧.勤務地)=[tbl_配置一覧_1].[勤務地]) AND ((tbl_配置一覧.開始時間)<[tbl_配置一覧_1].[終了時間]) AND ((tbl_配置一覧.終了時間)>[tbl_配置一覧_1].[開始時間])) ORDER BY tbl_配置一覧.ID; 大変申し訳ないですが、ご教授よろしくお願いいたします。

  • VBAでDBから取得したデータを突き合わせる

    VBAでOracleに接続し、取得したレコードを突き合せようとしています。 2つのテーブル(TBL_A、TBL_B)からレコードを1件ずつ取得し、 それぞれのレコードの項目を突き合わせて一致しているかを確認します。 2つのテーブルは以下のような状態です。 【TBL_A】 社員番号,SYAIN_NO,VARCHAR2(10) 社員名 ,SYAIN_NM,VARCHAR2(50) 【TBL_B】 社員番号,SYAIN_NO,VARCHAR2(10) 社員名 ,SYAIN_NM,VARCHAR2(50) レコードを取得する際、 以下のようなユーザ定義型変数に値を設定しています。 Dim TBL_A_REC As SYAIN Dim TBL_B_REC As SYAIN Type SYAIN SYAIN_NO As String SYAIN_NM As String End Type 今後、各テーブルに生年月日のカラム(BIRTH)を追加する可能性があり、生年月日も突き合わせたいです。 先日、こちらで質問してユーザ定義型変数を動的に増やすことは不可能であるとご回答を頂きました。 ユーザ定義型変数を用いずにDBから取得した値を設定し、 突き合わせを行う良い方法はあるのでしょうか?

  • Access で更新クエリー

    教えてください。アクセス2000 Win2Kです。 あるDBから1つのレコードだけ抽出し(オートナンバーをキーにしてテーブル作成クエリでローカルテーブルを作成します。)その後、そのレコードを加工して元のDBにもどしたいのですが、1レコード上にフィールドが60近くあるので一括で更新したいのです。「T_ローカル.*」みたいな感じで・・・。なにか良い方法はありませんか?一旦、DBから削除して加工したレコードを追加する方法も考えたのですが、DBのオートナンバーが変わってしまうのでやめました。 なにか良い方法をご存じの方、是非ご教授ください。 よろしくお願いします。

  • Access2010 更新データのレポート表示

    Access初心者です。 新規データを入力しても、レポートが更新されずに困っています。 (テーブルや、フォーム内では、データは更新されています) エクセルデータをAccess2010にインポートして、元テーブルを作成しました。 元テーブルを元に、フォーム・レポート・検索クエリ(年度別・分類別)等を作成しました。 ここまでの作業で、新規データの入力はありませんでした。 ところが・・・ 新規データをフォームに入力すると、元テーブルは更新されますが、既に作成しているレポートには、新規レコードが表示(反映)されません。 更新されている元テーブルを元に、もう一度レポートを作成しても、新規レコードは表示されません。 ホームタブの「全て更新」ボタンをクリックしても、新規レコードはレポートには表示されません。 尚、Access初心者です。 「更新クエリ」なるものは、作成していません。というか、「更新クエリ」って何?状態です。 また、クエリそのものが良くわかっておらず、作成したクエリは全て「検索」のためのクエリで、抽出条件に「 [] 」を入力したり、フィールドに「 年度: Year(DateAdd("m",-3,[発送日])) 」を入力したりしかできません。 勿論、リレーションシップって何???状態です。 どうしたらよいのでしょうか??? どなたか、初心者でもわかるように、教えていただけないでしょうか? 宜しくお願いいたします。

専門家に質問してみよう