次の方法で共有

現金出納簿「DSum()関数」で重たくなる問題について

Anonymous
2017-03-21T06:59:45+00:00

現金出納簿を作っています。

現金残高設定をクエリで下記のように設定しました。

表示順: [年月日] & Format([ID],"0000")

現金収入合計: Nz(DSum("現金収入","Q現金","表示順<='" & [表示順] & "'"))

現金支出合計: Nz(DSum("現金支出","Q現金","表示順<='" & [表示順] & "'"))

現金残高: [現金収入合計]-[現金支出合計]

ところが、レコード数が1000件近くになると、大変重くなり、

1万件になると、とても重くて使いものになりません。

「Access のパフォーマンスを向上させる」を参考にして、

各項目をチェックしてみましたが、改善されません。

残高のない現金出納簿で、トータルだけなら、問題はないのですが、

残高のない現金出納簿では、意味をもたないと思っています。

計算式に問題があるのか、良い方法があれば教えて下さい。

Accessを使って、独自の会計ソフトを完成させたいのです。

どうか、宜しくお願いします。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

4 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2017-03-22T16:50:54+00:00

    テーブルに残高フィールドを作成して、VBAで書き込むのが高速です。

    下記の関数を利用すればコードもシンプルに記述できます。

    累計値をテーブルに自動入力する関数

    この回答は役に立ちましたか?

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  2. Anonymous
    2017-03-21T07:34:39+00:00

    (昔から言われて続けていることですが)

    DSum 等の定義域集計関数は、それ自体低速な関数です。

    MS サポート: [ACC2000] Access 2000 でクエリを最適化する方法

    引用:

    > DLookup 関数のような定義域集計関数は使わないようにして、

    > クエリに含まれないテーブルのデータにアクセスすることを避けます。

    > 定義域集計関数は Access に固有の機能であるため、

    > これらの関数を使用するクエリは Jet で最適化できません。

    > 代わりに、関数からアクセスしていたテーブルをクエリに追加するか、

    > サブクエリを作成します。

    特に、定義域としてリンクテーブル(を含むクエリ)を指定した場合や、

    定義域に含まれるレコードの件数が膨大である場合、

    関数を(1回1回)呼び出す際のパフォーマンスは著しく低下します。

    何らかのフィールドの値の累計をクエリによって求めたいならば

    Sum 関数を用いたサブクエリを使用した方がよいでしょうし、あるいは

    最終的にその累計値をレポート上に出力なさりたいということであれば、

    クエリではなくレポート側で計算するようにされた方が無難でしょう。

    この回答は役に立ちましたか?

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  3. Anonymous
    2017-03-23T00:32:27+00:00

    ありがとうございます。

    ご紹介いただいた「関数」を利用したいと思います。

    累計値をテーブルに入力することで、解決しそうです。

    他でも、利用できそうで、大変うれしです。

    ほんとうにありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2017-03-22T07:51:57+00:00

    ご回答ありがとうございます。

    >関数を(1回1回)呼び出す際のパフォーマンスは著しく低下します。

    よく理解できました。

    残高処理は、入出金処理後に、デーブルに書き出す方法を考えて見ます。

    入出金で数百件前のデーターを訂正するといったことは考えられないので、

    その都度、データ化してしまえばよいのかなと、考えています。

    ただ、並び替えや抽出したときの、残高処理には、対応しないので、

    もう少し、考えを巡らさなければ、ならないですね。

    ご回答、本当にありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません