現在、クエリの、数量フィールドの合計、レコード数を求めるのに、dsum関数、dcount関数を使用しそれをmsgbox関数で表示しています。翌日、翌々日の場合抽出条件にnow()+1,now()+2を入れたクエリ作っています。たた、無駄にクエリの数が増えて困っています。抽出条件に[日付け入力]を入れるとエラーが出てしまいます。テキストボックス、inputbox関数等のUIに日付けを入れて合計、レコード数を求める方法はありませんか?また、表示にも非常に時間が掛かります。高速化が可能でしたら良い方法も知りたいです。ご教授よろしくお願いいたします。
エラーの状況がよくわからないけれど、
フォームに名前プロパティ:日付け入力のテキストボックスを作って
クエリの抽出条件に
[Forms]![作成したフォームの名前]![日付け入力]
でどうですか?
有難うございます。上手く行きました。テキストボックスの日付もmsgboxに表示する為に、me.日付入力.valueも入れています。ただ、8桁日付けで本日でしたら20201116と表示され見た目が良くない為、11月16日と置き換える事は、できますでしょうか?宜しくお願い致します。
Format関数、“mm月dd日“でどうですか?
ご回答有難う御座います。テキストボックスには、8桁日付けしか入れれない為Format関数をどのタイミングで入れれば良いか分かりません。msgboxの前に変数の構文を作りそれに対して使えば良いのでしょうか?set 変数=format(value)見たいな感じでしょうか?
VBA TextBoxに入力された8桁の数値を日付に変換する、をググるといけるかも?
ご回答有難う御座いました。恐らくなんとかなりそうです。
一般的に、合計を求めてダイアログボックスに表示する方法は、集計関数を使う方法しかないのでしょうか?レコード数であればadoという手もあるのですが。ローカルな環境では無い為、混雑してる時間ですと8個の計算結果を1つのダイアログボックスに表示している為、パソコンが固まり、タスクマネージャーで消すというリスクがある為、一般的にもこの様な事象が起こっているのか気になりまして。そこの所を教えて頂けないでしょうか?
私も、そこまで詳しくないので、VBAで探すか、クエリで集計しておくか、フォームのテキストボックスに計算式入れておくかで、軽くなるのかよくわかりません。分かる人に、回答を任せますね。
高速化について参考になれば
Q.Access って1万件超えると遅くて使い物にならないって本当ですか?(Fly me to the Access Heaven (クラウド対応版)さん)
定義域集計関数とSQLの比較(T'sWareさん)
ネットワーク越しで何度も読み込みたくないならフォームを作って閉じる代わりに
Me.Visible = False
するような仕掛けが簡単かな定義域集計関数をループで繰り返し呼び出したり、クエリ内の演算フィールドで使う場合は重くなる可能性がありますが、
一回だけ呼び出すのなら、定義域集計関数の第2引数に設定するテーブル、クエリの設計、第3引数の抽出条件の設定次第です。
他の方法(DAO, ADOなど)を使ってもテーブル、クエリの設計、抽出条件の設定が悪ければ同様に時間がかかります。
T'sWareさんの定義域集計関数とSQLの比較でも
10000回呼び出して差が10秒ですので1回あたりでは0.001秒ですので体感できる差ではないです。一回だけ呼び出すのなら、代替関数と比較すべきですのて、むしろ遅くなってます。定義域集計関数で時間がかかっているのなら(それも本当にそうなかの検証も必要です。別の部分で時間がかかっているのかも知れません。)、テーブル、クエリの設計、抽出条件の設定から検討する必要があります。
混雑時を避ければ表示は、早いのでformatによる整形とMe.Visible = Falseを入れてみたりして改善してみます。非常に助かりました。有難う御座いました。