回答編集履歴

4

2024/03/27 08:42 のコメントを受け、イベントマクロの設定例を追記しました。

2024/03/27 02:02

投稿

sk.exe
sk.exe

スコア784

test CHANGED
@@ -24,3 +24,18 @@
24
24
  とでは、処理自体の意味も、その処理を実行するタイミングや方法も異なります。
25
25
 
26
26
  もし後者の意味でおっしゃっているのであれば、例えばテキストボックス[人件費レート]の[更新後処理]イベントが発生した時点で強制的に[取引先リスト]のカレントレコードを保存してから追加クエリを実行すれば一応は可能でしょうけど、アンドゥ操作が効かなくなるという点においてあまりお奨めしません。
27
+
28
+ 前者の意味でおっしゃっているのであれば、概ね次のような流れでフォームの[更新前処理]イベントおよび[更新後処理]イベントで埋め込みマクロを実行なさればよいでしょう。
29
+
30
+ ### フォームの[更新前処理]イベント
31
+ - 保存されようとしているカレントレコードが新規レコードである場合は、履歴追加フラグを有効にする。
32
+ - 保存されようとしているカレントレコードが既存のレコードである場合は[人件費レート]の編集前の値と編集後の値を比較し、もし両者の値が異なっていたら履歴追加フラグを有効にする。
33
+
34
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-03-27/9af7e1a3-0162-434e-b4cc-c4e4cfe7a761.png)
35
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-03-27/e75cbfa9-0217-492e-9ed4-2398dd13f1f5.png)
36
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-03-27/ecadb6f5-6768-464a-944e-e8401d927cda.png)
37
+
38
+ ### フォームの[更新後処理]イベント
39
+ - もし履歴追加フラグを有効になっている場合は、テーブル[更新履歴]にレコードを追加する追加クエリを実行する。
40
+
41
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-03-27/64263210-2194-40c9-b778-d84da41f176f.png)

3

「の」→「を」

2024/03/26 09:45

投稿

sk.exe
sk.exe

スコア784

test CHANGED
@@ -15,7 +15,7 @@
15
15
 
16
16
  > 取引先フォームでテキストボックスにある「人件費レート」という数値を**更新したときだけ**
17
17
 
18
- - 「カレントレコードの編集を開始する前の[人件費レート]の値」と「カレントレコード保存した後の[人件費レート]の値」とを比較し、**もし両者の値が異なっていれば**テーブル[更新履歴]に後者の状態のカレントレコードのコピーを追加する。**両者の値が一致していればテーブル[更新履歴]に対してレコードを追加しない。**
18
+ - 「カレントレコードの編集を開始する前の[人件費レート]の値」と「カレントレコード保存した後の[人件費レート]の値」とを比較し、**もし両者の値が異なっていれば**テーブル[更新履歴]に後者の状態のカレントレコードのコピーを追加する。**両者の値が一致していればテーブル[更新履歴]に対してレコードを追加しない。**
19
19
 
20
20
 
21
21
 

2

修正漏れがありました。

2024/03/26 09:40

投稿

sk.exe
sk.exe

スコア784

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  - [取引先リスト]の詳細セクション上の連結テキストボックス[人件費レート]のコントロールソースはフィールド[人件費レート]である。
4
4
 
5
- という状態であるなら、**テキストボックス[人件費レート]の[更新後処理]イベントが発生した時点では、[取引先フォーム]のカレントレコードはまだ保存されていません**。
5
+ という状態であるなら、**テキストボックス[人件費レート]の[更新後処理]イベントが発生した時点では、[取引先リスト]のカレントレコードはまだ保存されていません**。
6
6
 
7
7
  > 更新クエリ
8
8
  > フィールド   得意先ID(主キー)        得意先名 人件費レート 更新日

1

フォームの名前にをクエリのパラメータと一致させました。

2024/03/26 09:39

投稿

sk.exe
sk.exe

スコア784

test CHANGED
@@ -1,6 +1,6 @@
1
- - [取引先フォーム]のレコードソースはテーブル[取引先]である。
1
+ - フォーム[取引先リスト]のレコードソースはテーブル[取引先]である。
2
2
 
3
- - [取引先フォーム]の詳細セクション上の連結テキストボックス[人件費レート]のコントロールソースはフィールド[人件費レート]である。
3
+ - [取引先リスト]の詳細セクション上の連結テキストボックス[人件費レート]のコントロールソースはフィールド[人件費レート]である。
4
4
 
5
5
  という状態であるなら、**テキストボックス[人件費レート]の[更新後処理]イベントが発生した時点では、[取引先フォーム]のカレントレコードはまだ保存されていません**。
6
6
 
@@ -11,7 +11,7 @@
11
11
  > 抽出条件    [forms]![取引先リスト]![得意先ID]
12
12
  > 追加先  更新履歴
13
13
 
14
- 上記の追加クエリを実行しようとする時点において、[取引先フォーム]のカレントレコードがまだ保存されていないのならば、このクエリによって追加されるのは「[取引先フォーム]によって**編集が開始される前の状態の**カレントレコード」のコピーでしかありません。
14
+ 上記の追加クエリを実行しようとする時点において、[取引先リスト]のカレントレコードがまだ保存されていないのならば、このクエリによって追加されるのは「[取引先リスト]によって**編集が開始される前の状態の**カレントレコード」のコピーでしかありません。
15
15
 
16
16
  > 取引先フォームでテキストボックスにある「人件費レート」という数値を**更新したときだけ**
17
17
 
@@ -23,4 +23,4 @@
23
23
 
24
24
  とでは、処理自体の意味も、その処理を実行するタイミングや方法も異なります。
25
25
 
26
- もし後者の意味でおっしゃっているのであれば、例えばテキストボックス[人件費レート]の[更新後処理]イベントが発生した時点で強制的にフォームのカレントレコードを保存してから追加クエリを実行すれば一応は可能でしょうけど、アンドゥ操作が効かなくなるという点においてあまりお奨めしません。
26
+ もし後者の意味でおっしゃっているのであれば、例えばテキストボックス[人件費レート]の[更新後処理]イベントが発生した時点で強制的に[取引先リスト]のカレントレコードを保存してから追加クエリを実行すれば一応は可能でしょうけど、アンドゥ操作が効かなくなるという点においてあまりお奨めしません。