回答編集履歴

4

推敲

2021/04/22 05:00

投稿

sazi
sazi

スコア25199

test CHANGED
@@ -138,4 +138,4 @@
138
138
 
139
139
  [レコード単位の編集イベント](https://tsware.jp/study/vol5/event_07.htm)
140
140
 
141
- 今回の場合だと、AfterUpdateイベントで、測定量を更新するようにすれば良いと思います。
141
+ 今回の場合だと、AfterInsertやAfterUpdateイベントで、測定量を編集するようにすれば良いと思います。

3

追記

2021/04/22 05:00

投稿

sazi
sazi

スコア25199

test CHANGED
@@ -125,3 +125,17 @@
125
125
  ただ、このようにネストさせても、データ件数が多く集計などが絡む場合に演算項目が確定しないケースもあります。
126
126
 
127
127
  その場合は、ネストしている部分をワークテーブルに結果を書き出すなどして、値を確定させると改善します。
128
+
129
+
130
+
131
+ 追記
132
+
133
+ --
134
+
135
+ 更新対象のデータを参照するような作りだと、#エラーが表示される状況を回避するのは難しいかもしれません。
136
+
137
+ イベント処理で、計算した結果を書き込むようにする方が確実だと思います。
138
+
139
+ [レコード単位の編集イベント](https://tsware.jp/study/vol5/event_07.htm)
140
+
141
+ 今回の場合だと、AfterUpdateイベントで、測定量を更新するようにすれば良いと思います。

2

追記

2021/04/22 04:59

投稿

sazi
sazi

スコア25199

test CHANGED
@@ -67,3 +67,61 @@
67
67
  ```
68
68
 
69
69
  それから、履歴テーブルに、(種類,所属,日付,ID)のインデックスを作成するとさらに性能が改善されるかもしれません。
70
+
71
+
72
+
73
+ ネスト構成のSQLは以下です。
74
+
75
+ ネストしている部分(step1・2)をそれぞれクエリーにしても可
76
+
77
+ ```SQL
78
+
79
+ SELECT Step2.*
80
+
81
+ , Year(日付) As 移充填年
82
+
83
+ , Month(日付) As 移充填月
84
+
85
+ , Step2.規定量 AS F1規定量
86
+
87
+ , Step2.測定量 AS F1測定量
88
+
89
+ , step2.充填規定量 As 規定量
90
+
91
+ , Nz(総重量 - 前回総重量, 0) As 測定量
92
+
93
+ FROM (
94
+
95
+ SELECT Step1.*
96
+
97
+ , DLookUp("総重量","履歴","ID=" & 前回ID) As 前回総重量
98
+
99
+ FROM (
100
+
101
+ SELECT 履歴.*
102
+
103
+ , DLookup("規定量", "充填量", "発注='" & 履歴.発注 & "'") As 充填規定量
104
+
105
+ , Nz(DMax("ID", "履歴", "ID < " & 履歴.ID & " AND 日付=#" & 日付 & "# AND 種類='" & 種類 & "' AND 所属='" & 所属 & "'"), 0) As 前回ID
106
+
107
+ FROM 履歴
108
+
109
+ WHERE Year(日付) =[Forms]![入力画面]![年選択]
110
+
111
+ AND Month(日付)=[Forms]![入力画面]![月選択]
112
+
113
+ AND 履歴.種類 =[Forms]![入力画面]![種類選択]
114
+
115
+ AND 履歴.所属 =[Forms]![入力画面]![所属選択]
116
+
117
+ ) As Step1
118
+
119
+ ) As Step2
120
+
121
+ ;
122
+
123
+ ```
124
+
125
+ ただ、このようにネストさせても、データ件数が多く集計などが絡む場合に演算項目が確定しないケースもあります。
126
+
127
+ その場合は、ネストしている部分をワークテーブルに結果を書き出すなどして、値を確定させると改善します。

1

訂正

2021/04/22 04:48

投稿

sazi
sazi

スコア25199

test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  , DLookup("規定量", "充填量", "発注='" & 履歴.発注 & "'") As 規定量
46
46
 
47
- , Nz(DMax("ID", "履歴", "ID < " & ID & " AND 日付=#" & 日付 & "# AND 種類='" & 種類 & "' AND 所属='" & 所属 & "'"), 0) As 前回ID
47
+ , Nz(DMax("ID", "履歴", "ID < " & 履歴.ID & " AND 日付=#" & 日付 & "# AND 種類='" & 種類 & "' AND 所属='" & 所属 & "'"), 0) As 前回ID
48
48
 
49
49
  , DLookUp("総重量","履歴","ID=" & [前回ID]) As 前回総重量
50
50