前提・実現したいこと
はじめまして。自力では解決せず教えて頂きたいです。 Accessサブフォーム内で集計するデータベースを作りましたが サブフォーム内の計算の処理が、入力したレコードの増える毎に 遅くなります。(エラー等は出ず、動作自体はしています) クエリのフィールド内の処理が原因と考えていますが 速度の改善に具体的にどのような手立てがあるのか分かりません。
発生している問題・エラーメッセージ
サブフォーム内の選択しているレコードより1つ若いレコードの数値を 減算するフィールドがあるのですが、入力したレコードが増える毎に 処理が遅くなります。 (以下の説明図のサブフォーム内項目名「総重量」入力時、 サブフォーム内のレコードが5~6行あたりまで増えると 測定量の表示処理が数分かかることがあります。 実際の運用時には10行以上入力することもあります。)
該当のソースコード
総重量フィールド入力時に処理が絡むフィールドの中身は以下です。
・クエリ名"フィルター3"
測定量: IIf([No]=1,0,[総重量]-(DLookUp("[総重量]","フィルター3","[No]=" & Nz([No]-1,1)))) No: CInt(DCount("[フィルター1].[ID]","フィルター3","[フィルター1].[ID]<=" & [フィルター1].[ID]))
・クエリ名"フィルター1"
IDはオートナンバー型で入力した順番を見ています。
総重量はサブフォームで手入力されたデータの入れ物です。
ID,総重量フィールドはテーブル名"履歴"直結です。
(フィルター1クエリではメインフォームで入力した所属や日付、番号から
履歴テーブルを絞り込む役割で作りました。)
ID:ID 総重量:総重量
総重量入力時のVBAは以下です。
(正直、VBAに関してはよく分からず書いてます。
表示が上手く行ったのでこれでいいのかなレベルです…)
Private Sub 総重量_AfterUpdate() Me.測定量.Requery Me.測定量計算.Requery End Sub Private Sub 総重量_GotFocus() Me.測定量計算.Requery End Sub
測定量計算はサブフォームフッターにテキストで表示しています。
(説明図で表示されている総測定量です)
=Max("総重量")-DMin("総重量","フィルター3")
試したこと
VBAに書き換えることで速くなるのではと期待し、勉強していますが
私自身ネットに上げてくださっている既存のプログラムの一部を
切り貼りしながら初めてデータベースを作った程度の実力で
お恥ずかしながら自力で書いては上手く動かず苦戦しています。
補足情報(FW/ツールのバージョンなど)
Microsoft Access 2019(.accdb)
以下追記です。
・フィルター3のSQLです。
SELECT DISTINCTROW [フィルター1].ID, CInt(DCount("[フィルター1].[ID]","フィルター3","[フィルター1].[ID]<=" & [フィルター1].[ID])) AS [No], [フィルター1].[BNo], [フィルター1].日付, [フィルター1].[NGNo], [フィルター1].発注, 充填量.規定量, [フィルター1].規定量 AS F1規定量, IIf([No]=1,0,[総重量]-(DLookUp("[総重量]","フィルター3","[No]=" & Nz([No]-1,1)))) AS 測定量, [フィルター1].測定量 AS F1測定量, [フィルター1].総重量, [フィルター1].[所属], [フィルター1].種類, [フィルター1].区分, [フィルター1].担当者 FROM フィルター1 LEFT JOIN 充填量 ON [フィルター1].発注 = 充填量.発注
・フィルター1のSQLです。
SELECT 履歴.ID, Year([日付]) AS 移充填年, Month([日付]) AS 移充填月, 履歴.種類, 履歴.[所属], 履歴.[BNo], 履歴.日付, 履歴.区分, 履歴.[NGNo], 履歴.発注, 履歴.規定量, 履歴.測定量, 履歴.担当者, 履歴.総重量 FROM 担当者 INNER JOIN 履歴 ON 担当者.ID = 履歴.担当者 WHERE (((Year([日付]))=[Forms]![入力画面]![年選択]) AND ((Month([日付]))=[Forms]![入力画面]![月選択]) AND ((履歴.種類)=[Forms]![入力画面]![種類選択]) AND ((履歴.[所属])=[Forms]![入力画面]![所属選択]));
テーブルについては以下です。
・履歴テーブル(入力毎に増え最大200ほど)
ID:オートナンバー型
日付:日付/時刻型
区分、担当者、所属、種類:数値型(長整数型)
規定量、測定量、総重量:数値型(倍精度浮動小数点型、小数点以下3桁)
発注、BNo、NGNo:テキスト型(フィールドサイズ20)
・充填量テーブル(規定でそこまで増えません。データ数1500ほど)
規定量:数値型(単精度浮動小数点型、小数点以下3桁)
発注:テキスト型(フィールドサイズ7)
回収ID:数値型
情報が足りていなければ申し訳ありません。追記します。
回答1件
あなたの回答
tips
プレビュー