teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

推敲

2021/04/22 05:00

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -68,4 +68,4 @@
68
68
  更新対象のデータを参照するような作りだと、#エラーが表示される状況を回避するのは難しいかもしれません。
69
69
  イベント処理で、計算した結果を書き込むようにする方が確実だと思います。
70
70
  [レコード単位の編集イベント](https://tsware.jp/study/vol5/event_07.htm)
71
- 今回の場合だと、AfterUpdateイベントで、測定量を更新するようにすれば良いと思います。
71
+ 今回の場合だと、AfterInsertやAfterUpdateイベントで、測定量を編集するようにすれば良いと思います。

3

追記

2021/04/22 05:00

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -61,4 +61,11 @@
61
61
  ;
62
62
  ```
63
63
  ただ、このようにネストさせても、データ件数が多く集計などが絡む場合に演算項目が確定しないケースもあります。
64
- その場合は、ネストしている部分をワークテーブルに結果を書き出すなどして、値を確定させると改善します。
64
+ その場合は、ネストしている部分をワークテーブルに結果を書き出すなどして、値を確定させると改善します。
65
+
66
+ 追記
67
+ --
68
+ 更新対象のデータを参照するような作りだと、#エラーが表示される状況を回避するのは難しいかもしれません。
69
+ イベント処理で、計算した結果を書き込むようにする方が確実だと思います。
70
+ [レコード単位の編集イベント](https://tsware.jp/study/vol5/event_07.htm)
71
+ 今回の場合だと、AfterUpdateイベントで、測定量を更新するようにすれば良いと思います。

2

追記

2021/04/22 04:59

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -32,4 +32,33 @@
32
32
  AND 履歴.所属 =[Forms]![入力画面]![所属選択]
33
33
  ;
34
34
  ```
35
- それから、履歴テーブルに、(種類,所属,日付,ID)のインデックスを作成するとさらに性能が改善されるかもしれません。
35
+ それから、履歴テーブルに、(種類,所属,日付,ID)のインデックスを作成するとさらに性能が改善されるかもしれません。
36
+
37
+ ネスト構成のSQLは以下です。
38
+ ネストしている部分(step1・2)をそれぞれクエリーにしても可
39
+ ```SQL
40
+ SELECT Step2.*
41
+ , Year(日付) As 移充填年
42
+ , Month(日付) As 移充填月
43
+ , Step2.規定量 AS F1規定量
44
+ , Step2.測定量 AS F1測定量
45
+ , step2.充填規定量 As 規定量
46
+ , Nz(総重量 - 前回総重量, 0) As 測定量
47
+ FROM (
48
+ SELECT Step1.*
49
+ , DLookUp("総重量","履歴","ID=" & 前回ID) As 前回総重量
50
+ FROM (
51
+ SELECT 履歴.*
52
+ , DLookup("規定量", "充填量", "発注='" & 履歴.発注 & "'") As 充填規定量
53
+ , Nz(DMax("ID", "履歴", "ID < " & 履歴.ID & " AND 日付=#" & 日付 & "# AND 種類='" & 種類 & "' AND 所属='" & 所属 & "'"), 0) As 前回ID
54
+ FROM 履歴
55
+ WHERE Year(日付) =[Forms]![入力画面]![年選択]
56
+ AND Month(日付)=[Forms]![入力画面]![月選択]
57
+ AND 履歴.種類 =[Forms]![入力画面]![種類選択]
58
+ AND 履歴.所属 =[Forms]![入力画面]![所属選択]
59
+ ) As Step1
60
+ ) As Step2
61
+ ;
62
+ ```
63
+ ただ、このようにネストさせても、データ件数が多く集計などが絡む場合に演算項目が確定しないケースもあります。
64
+ その場合は、ネストしている部分をワークテーブルに結果を書き出すなどして、値を確定させると改善します。

1

訂正

2021/04/22 04:48

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -21,7 +21,7 @@
21
21
  , 履歴.担当者
22
22
  , 履歴.総重量
23
23
  , DLookup("規定量", "充填量", "発注='" & 履歴.発注 & "'") As 規定量
24
- , Nz(DMax("ID", "履歴", "ID < " & ID & " AND 日付=#" & 日付 & "# AND 種類='" & 種類 & "' AND 所属='" & 所属 & "'"), 0) As 前回ID
24
+ , Nz(DMax("ID", "履歴", "ID < " & 履歴.ID & " AND 日付=#" & 日付 & "# AND 種類='" & 種類 & "' AND 所属='" & 所属 & "'"), 0) As 前回ID
25
25
  , DLookUp("総重量","履歴","ID=" & [前回ID]) As 前回総重量
26
26
  , Nz(総重量 - [前回総重量], 0) As 測定量
27
27
  FROM 履歴 INNER JOIN 担当者