Microsoft Access 掲示板

日付けを指定して、クエリの合計数、レコード数を知りたい。

10 コメント
views
4 フォロー

現在、クエリの、数量フィールドの合計、レコード数を求めるのに、dsum関数、dcount関数を使用しそれをmsgbox関数で表示しています。翌日、翌々日の場合抽出条件にnow()+1,now()+2を入れたクエリ作っています。たた、無駄にクエリの数が増えて困っています。抽出条件に[日付け入力]を入れるとエラーが出てしまいます。テキストボックス、inputbox関数等のUIに日付けを入れて合計、レコード数を求める方法はありませんか?また、表示にも非常に時間が掛かります。高速化が可能でしたら良い方法も知りたいです。ご教授よろしくお願いいたします。

YS
作成: 2020/11/15 (日) 12:29:00
通報 ...
1
りんご 2020/11/15 (日) 18:49:53 48103@0e907

エラーの状況がよくわからないけれど、
フォームに名前プロパティ:日付け入力のテキストボックスを作って
クエリの抽出条件に
[Forms]![作成したフォームの名前]![日付け入力]
でどうですか?

2
名前なし 2020/11/15 (日) 21:53:07 d4e4c@f4546

有難うございます。上手く行きました。テキストボックスの日付もmsgboxに表示する為に、me.日付入力.valueも入れています。ただ、8桁日付けで本日でしたら20201116と表示され見た目が良くない為、11月16日と置き換える事は、できますでしょうか?宜しくお願い致します。

3
りんご 2020/11/15 (日) 23:07:39 48103@0e907

Format関数、“mm月dd日“でどうですか?

4

ご回答有難う御座います。テキストボックスには、8桁日付けしか入れれない為Format関数をどのタイミングで入れれば良いか分かりません。msgboxの前に変数の構文を作りそれに対して使えば良いのでしょうか?set 変数=format(value)見たいな感じでしょうか?

5
りんご 2020/11/16 (月) 00:04:15 48103@0e907

VBA TextBoxに入力された8桁の数値を日付に変換する、をググるといけるかも?

6

ご回答有難う御座いました。恐らくなんとかなりそうです。
一般的に、合計を求めてダイアログボックスに表示する方法は、集計関数を使う方法しかないのでしょうか?レコード数であればadoという手もあるのですが。ローカルな環境では無い為、混雑してる時間ですと8個の計算結果を1つのダイアログボックスに表示している為、パソコンが固まり、タスクマネージャーで消すというリスクがある為、一般的にもこの様な事象が起こっているのか気になりまして。そこの所を教えて頂けないでしょうか?

7
りんご 2020/11/16 (月) 08:49:13 48103@0e907

私も、そこまで詳しくないので、VBAで探すか、クエリで集計しておくか、フォームのテキストボックスに計算式入れておくかで、軽くなるのかよくわかりません。分かる人に、回答を任せますね。

8
hiroton 2020/11/16 (月) 09:07:48 e49f8@f966d

高速化について参考になれば
Q.Access って1万件超えると遅くて使い物にならないって本当ですか?(Fly me to the Access Heaven (クラウド対応版)さん)
定義域集計関数とSQLの比較(T'sWareさん)

ネットワーク越しで何度も読み込みたくないならフォームを作って閉じる代わりにMe.Visible = Falseするような仕掛けが簡単かな

9
hatena 2020/11/16 (月) 10:18:52 修正

定義域集計関数をループで繰り返し呼び出したり、クエリ内の演算フィールドで使う場合は重くなる可能性がありますが、
一回だけ呼び出すのなら、定義域集計関数の第2引数に設定するテーブル、クエリの設計、第3引数の抽出条件の設定次第です。
他の方法(DAO, ADOなど)を使ってもテーブル、クエリの設計、抽出条件の設定が悪ければ同様に時間がかかります。

T'sWareさんの定義域集計関数とSQLの比較でも10000回呼び出して差が10秒ですので1回あたりでは0.001秒ですので体感できる差ではないです。一回だけ呼び出すのなら、代替関数と比較すべきですのて、むしろ遅くなってます。

定義域集計関数で時間がかかっているのなら(それも本当にそうなかの検証も必要です。別の部分で時間がかかっているのかも知れません。)、テーブル、クエリの設計、抽出条件の設定から検討する必要があります。

10

混雑時を避ければ表示は、早いのでformatによる整形とMe.Visible = Falseを入れてみたりして改善してみます。非常に助かりました。有難う御座いました。