質問: microsoftaccess2000「社員管理システム」退社日を他のフォームに反映させたいです。 microsoftaccess2000「社員管理システム」を使用しています。 社員の退社日を入力した時に、その日付を社員履歴(派遣先履歴) の最後の終了日に反映させたいです。 社員基本tbl内に退社日 社員履歴tbl内に終了日 社員履歴que内に終了日 社員マスタfrmに退社日 社員マスタサブフォームに終了日 があります。 退社日は必ず社員履歴の最後の終了日と同じになるので反映させたいです。 情報不足だと思うので申し訳ないのですが宜しくお願い致します!!
回答: その退社日は、どこから入力されているのでしょうか。 実体に設定すれば、後はクエリ、フォーム等は再クエリ操作で更新されます。 ということは、 社員基本tbl内に退社日 社員履歴tbl内に終了日 について考えればよいのでは? テーブル構成、タイミングが全くわからないので、雰囲気になりますが、 社員基本tbl内に退社日を設定したタイミングで、 更新クエリで社員履歴tbl内に終了日を設定すればよいと思います。 update 社員履歴tbl set 終了日 = 退社日に設定した日 where xxxxxx; where の xxxxxx 部分に、その人/履歴の最後を特定する条件を指定します。 ご質問の解釈を少し変えてみます。 単票フォームにサブフォームの構成になっていて、 サブフォーム側のレコードソースが、 社員履歴tblをベースに単票フォーム側のコントロールを参照抽出するクエリ 社員履歴queが指定してあり、帳票フォームとして作っている。 単票フォームのレコードソースは、社員基本tblになっている。 単票フォーム側にある「退社日」を入力した時点で、 サブフォーム側の最後の終了日に値を設定したい。 としてみます。 サブフォーム側の表示順は、どのような順なのかはわかりませんが、 最後(最終行)の終了日に設定するものとします。 サブフォームコントロール名を「fsub」と仮定します。 サブフォーム側に記述するもの) public sub setlastday() me.recordset.movelast me.終了日 = me.parent.退社日 end sub 親フォーム側に記述するもの) private sub 退社日_afterupdate() call me.fsub.form.setlastday end sub 親フォームの「退社日」の更新後処理で、サブフォーム側に記述した関数を呼び出します。 呼び出された関数内では、レコードを最後に移動させてから、親の退社日を終了日に設定します。 (親からみれば子でどんな順になっているか知りたくもない。 変更された時点で関数呼ぶので、最後/最初など、後は好きにして・・・ってな感じで) 退社日に入力があると最後の終了日に値が設定されますが、双方でレコード確定動作が起きるようです。 エラーとかあった場合の動作など見ていないので、使えるものなのかは検証してください。 (たまたま動いているように見えているだけかも) (サブフォーム側に表示しているものがなければエラーになる・・・など) 退社日の更新後処理ではなく、フォームの更新後処理でも良いと思います。 関数名等は適宜変更してください。 なお、親フォームが面倒をみるのなら private sub 退社日_afterupdate() with me.fsub.form .recordset.movelast .終了日 = me.退社日 end with end sub でも良いかも。 解釈/仮定が違ってましたら、補足してください。 (かなりの情報が不足しています)