Microsoft Access 掲示板

Dlookupについて / 1

5 コメント
views
4 フォロー
1
hatena 2023/02/02 (木) 11:38:17 修正

まず、

    Me.作業名時間1 = IIf(IsNull(DLookup("時間の合計", "Q_設計_実績伝票処理_作業別時間集計", "作業名No = 1")), 0, DLookup("時間の合計", "Q_設計_実績伝票処理_作業別時間集計", "作業名No = 1")) & " H"

同じDLookupの式を2回呼び出しているのは無駄ですね。Nz関数を使えば1回ですみます。

    Me.作業名時間1 = Nz(DLookup("時間の合計", "Q_設計_実績伝票処理_作業別時間集計", "作業名No = 1"), 0) & " H"

ただ、これはそれほど処理速度に影響はないですね。呼び出しが2回か1回かなので。

クエリにDLookup関数を使用すると、クエリのレコード件数分繰り返し呼び出されますので重くなります。

これはDLookup関数を使わずに、クエリのオートルックアップ機能を使うと高速化できるでしょう。下記のリンク先を参考にトライしてみてください。

Accessの「オートルックアップクエリ」とは | できるネット

ACCESSの基本技 オートルックアップクエリは超便利 | KEIYU企画

ただし、Q_設計_実績伝票処理_作業別時間集計 は集計クエリだと思いますが、そうだとしたらこのフォームではデータの更新はできないので参照だけのフォームになります。
データ編集はこのフォームから編集用の単票フォームを呼び出すというような設計にする必要がありますね。

あと、クエリ内のテーブルのフィールドのインデックスを適切に設定することで処理速度は改善する可能性があります。これも下記を参考にして設定をしてみてください。

インデックスの作成と使用によりパフォーマンスを向上させる - Microsoft サポート

Accessのテーブルの[インデックス]とは | できるネット

上記で学習したうえで、具体的にどう設定したらいいかわからないという場合は、現状の各テーブルのフィールド構成(フィールド名や主キー設定)を提示してください。

通報 ...