こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access)クエリの式の比較抽出

Accessでクエリに式を入れてあるのですが、
その式をSQLのwhere句で抽出できないものでしょうか?

クエリ(管理台帳クエリ)のフィールドの式は

次回検査日: DateAdd("yyyy",[検査周期],[最終検査日])

となっており、VBAで

strSQL = "select 次回検査日 from 管理台帳クエリ where 次回検査日 <= #" & txtDate & "#"
lstTbl.RowSource = strSQL

を実行してもlstTblには何も表示されません。

txtDateは日付の入っているテキストボックス、lstTblはリストボックスです。
検査周期と最終検査日は、管理台帳テーブルに定義されているフィールドで、
検査周期には、1~3の数字が入っています。

ちなみに最終検査日に変えてみると、問題なく抽出できます。

いろいろ調べてもよくわからず、煮詰まっています。
次回検査日をテーブルに定義するしかないのでしょうか?

よろしくお願いします。

投稿日時 - 2014-01-31 03:05:43

QNo.8454588

すぐに回答ほしいです

質問者が選んだベストアンサー

確かめたわけではないですが、下記の式だとどうでしょうか。

strSQL = "select 次回検査日 from 管理台帳クエリ where CDate(次回検査日) <= #" & txtDate & "#"


あるいは、

strSQL = "select 次回検査日 from 管理台帳クエリ where 最終検査日 <= DateAdd("yyyy",-[検査周期], #" & txtDate & "#)"

投稿日時 - 2014-01-31 11:56:14

補足

もしや、と思って、クエリのフィールドの式を

次回検査日: CDate(DateAdd("yyyy",[検査周期],[最終検査日]))

としてみましたが、同じでした。

なお、「order by句」についても、次回検査日を入れると挙動不審です(泣

前にwhere句があるとソートされるのですが、
where句がないとリストが真っ白に‥。

↓正常に走るSQLの例
"select 管理台帳ID, 次回検査日 from 管理台帳クエリ where 部署ID = '" & txtBusho & "' order by 次回検査日 desc, 管理台帳ID"

↓リストが真っ白になるSQLの例
"select 管理台帳ID, 次回検査日 from 管理台帳クエリ order by 次回検査日 desc, 管理台帳ID"

なんどウォッチ式を確認しても、SQL文に不備はないような気がしますけれども‥。

投稿日時 - 2014-01-31 13:04:35

お礼

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

CDate関数の使用ですが、ダブルクオーテーションでくくられたSQL文の中にVBA関数を記述しても、機能しないようです。

DateAdd関数については、SQL構文の外に出して、

strSQL = "select 次回検査日 from 管理台帳クエリ where 最終検査日 <= " DateAdd("yyyy", -RS1!検査周期, txtDate)

と書けばうまくいくかもしれません。

ただこれだと2回SQLを実行(1回目は検査周期の抽出)しなければならないですね。それでも単純な計算式にもかかわらずテーブルにフィールドを増やさなければならないという無駄よりは、ましかもしれませんが‥。

投稿日時 - 2014-01-31 12:40:20

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

#1さんの回答へ横レスさせて下さい

文字列中に”を含めたい場合は、2重に書くとOKです。

strSQL = "select 次回検査日 from 管理台帳クエリ where 最終検査日 <= DateAdd("”yyyy””,-[検査周期], #" & txtDate & "#)"

投稿日時 - 2014-02-01 10:42:19

お礼

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

やはり最終検査日を条件として次回検査日を抽出するしかないようですね。

hatena1989様への補足でも書きましたが、
クエリに式を入れて、それを抽出・ソート条件に使うと、どうも誤動作するような感じです。

最終検査日を使って抽出がうまくいったとしても、次回検査日でのソートがおかしくなってしまい、お手上げ状態‥。

最終検査日に1年か2年か3年を足すだけの次回検査日を、わざわざ台帳マスタにフィールド定義するのが野暮な感じですけれども、仕方がないので定義しました。

台帳に実在するフィールドのクエリですと、抽出・ソートとも正常に動作しています。
仕様の限界なのかもしれません。

投稿日時 - 2014-02-05 13:12:01

あなたにオススメの質問