Access (VBA) |
![]() ![]() |
(Windows 11 Pro : Access 2019)
十進型フィールドの検索で正しい結果が取得できない
投稿日時: 22/11/04 14:16:37
投稿者: teruteruru
|
---|---|
お世話になります。
|
![]() |
投稿日時: 22/11/04 18:09:12
投稿者: MMYS
|
---|---|
Debug.Printのコードが実行される条件はlngCntがゼロの時ですよね。
|
![]() |
投稿日時: 22/11/04 18:37:49
投稿者: sk
|
---|---|
引用: 引用: 確かに再現されますね。 引用: ・Sum, Count などの SQL 集計関数の呼び出し、もしくは GROUP BY 句によるグループ化を実行しようとしている。 (上記の SQL の場合は GROUP BY 句が記述せずに Count 関数を呼び出しているため、テーブル[TEST00]の レコード全体で 1 つのグループという扱いになる) ・WHERE 句において、十進型のフィールドを対象とする比較条件が含まれている。 ・その十進型のフィールドが定義されているテーブルにおいて、 そのフィールドを含むインデックスが定義されている。 (そのフィールドのみで構成された単一フィールドインデックス(重複あり)、 またはそのフィールドを含む複数フィールドインデックス) ・そのテーブルにおいて、その単一の比較条件に該当するグループの レコード件数が 2501 の倍数である。 こちらで検証した限りでは、上記の全ての条件が満たされたグループについては 本来抽出されるべきはずのレコードが抽出されないという状態になりました。 引用: 例えばループ回数を 2501 にした上でプロシージャを実行して [TEST00]に 2501 件のレコードが格納された状態にしてから、 Access 上で同様の選択クエリを実行すれば確認できるはず。 |
![]() |
投稿日時: 22/11/07 14:18:34
投稿者: teruteruru
|
---|---|
コメントありがとうございます。
|
![]() |
投稿日時: 22/11/07 15:47:26
投稿者: sk
|
---|---|
引用: そうですね。 フィールドのデータ型が十進型ではなく長整数型であれば正常に抽出されますし、 十進型のままであってもインデックスに含まれていなければ同じく抽出されます。 実行されているコードや SQL の内容については何ら不備はなく、 Access のデータベースエンジン側の不具合であると思われます。 (何故 2501 の倍数なのか、という理由に関してはまるで見当もつきませんが) テーブル定義を変更しない場合における現時点での回避策は、 そのフィールドの値を CLng や CDbl などの関数によって 型変換した結果と数値リテラルを比較するように条件式を 組み上げることぐらいかと。 引用: 引用: そのフィールドの値が Null であるレコードが存在しないのであれば、 例えば次のように書き換えればよいはず。 ------------------------------------------------------------- select count(*) as CNT from TEST01 where A>0 and CLng(B)=1 ------------------------------------------------------------- もしその十進型のフィールドに、長整数型や通貨型の有効範囲を 超える数値が格納され得るのであれば、多少困ったことになりますね。 |
![]() |
投稿日時: 22/11/07 15:47:56
投稿者: teruteruru
|
---|---|
コメントありがとうございます。
|