更新クエリがシンプルにできるようなのですがわかりません。 - MS Office - 教えて!goo
下記質問の回答者です:
No.7の回答にも後から画像にて追記しましたが、残念ながら
「フォームでのレコード並び順による、前(または後)レコード
の連動更新」では、そちらの環境でのエラーをこちらのPCで
再現できなかったため(汗)、別のアプローチを回答します。
> 更新クエリがシンプルにできるようなのですがわかりません。
Google Analyticsヘルプセンター正規表現とは何です
確かに、ある条件を満たす場合は、更新クエリでシンプルに
対応できますが、そのためには「現在編集中のレコード」に
対して「直前(又は直後)のレコード」を特定できるフィールド
が必要です。
※通常は「開始日/終了日」で前後が特定できるはずと
考えますが、今回はその「開始日/終了日」の修正、
という事態を想定してのコードになるので、残念ながら
このフィールドは使用できない、と判断します。
(職歴の話なので、「2010/9/6」を「2010/9/7」とした
程度なら前後関係は変わりませんが、「2001/9/6」と
していた、といった場合は前後関係の逆転もありうる、と)
フィールド構成はこちらのご質問を参考としました:
ですので、更新クエリでシンプルな対応を可能にするには、
「前/後」を特定可能にするための、社員ごとに履歴順に
連番が割り当てられる「SubID」といったフィールドの新設が
必要になります。
どのようにWebサイトのディレクトリ内のファイルのリストを取得する
これがあれば、更新クエリに以下のような条件を指定すれば
すぐ前の職歴の終了日を更新できるようになります:
『社員コード』の『抽出条件:』欄:
[Forms]![社員マスタFRM]![社員コード]
『SubID』の『抽出条件:』欄:
DMax("[SubID]", "社員履歴TBL", "[社員コード]='" & [Forms]![社員マスタFRM]![社員コード] & "' And [SubID]<" [Forms]![社員マスタFRM]![SubID])
※社員コードが文字列型の場合(SubIDは確実に数値型として)。
『終了日』の『レコードの更新:』欄:
DateAdd("d",1,[Forms]![社員マスタFRM]![開始日])
但し、データベースへのデータ入力がこれから始まるなら
問題ありませんが、既に多くのデータが蓄積されている
場合、既存のレコードにどうやってこの連番を振るか、
という問題が発生します(汗)
(開始日/終了日を信用して、それを元に割り当ててしまっても
よいなら、マクロ/VBAで割り当てることは可能ですが・・・:
ループ処理が発生するので、これも複雑と感じられてしまう
可能性もあります(汗))
どのように私はMySpaceのブロックユーザーがハックしない
・・・開始日/終了日の修正頻度がそれほど高くはないはずの
ことを考慮すると、そこまで労力を掛けてつけるだけの価値が
ある機能か、という検討もしてみた方がいいかもしれません(汗)
※開始日/終了日の修正幅が数日しかないと考えてよいよう
なら、上記で『SubID』としたところを、『開始日』か『終了日』
に置き換えてやっても構わないことになります。
◆本ご質問の「退社日を最終日に反映」についても、
「現在入力済みの開始日で最も遅いもの」を最終履歴として
判断してよいなら、『開始日』の抽出条件欄に
DMax("[開始日]", "社員マスタTBL", "[社員コード]='" & [Forms]![社員マスタFRM]![社員コード])
としてやればOkです。
(上と同様に『社員コード』への抽出条件も必要:
入れないと全社員が更新対象になってしまうので要注意(汗))
※クエリでの更新結果は、そのままでは即座にはフォームに
反映されませんので、コントロールの再クエリが必要です。
(「Me!終了日.Requery」といった感じ)
通報する
0 コメント:
コメントを投稿