Accessのクエリ式の比較抽出について

このQ&Aのポイント
  • Accessでクエリに式を入れてあるのですが、SQLのwhere句で抽出できないものでしょうか?
  • txtDateは日付の入っているテキストボックス、lstTblはリストボックスです。検査周期と最終検査日は、管理台帳テーブルに定義されているフィールドで、検査周期には、1~3の数字が入っています。
  • 次回検査日をテーブルに定義するしかないのでしょうか?
回答を見る
  • ベストアンサー

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

Accessでクエリに式を入れてあるのですが、 その式をSQLのwhere句で抽出できないものでしょうか? クエリ(管理台帳クエリ)のフィールドの式は 次回検査日: DateAdd("yyyy",[検査周期],[最終検査日]) となっており、VBAで strSQL = "select 次回検査日 from 管理台帳クエリ where 次回検査日 <= #" & txtDate & "#" lstTbl.RowSource = strSQL を実行してもlstTblには何も表示されません。 txtDateは日付の入っているテキストボックス、lstTblはリストボックスです。 検査周期と最終検査日は、管理台帳テーブルに定義されているフィールドで、 検査周期には、1~3の数字が入っています。 ちなみに最終検査日に変えてみると、問題なく抽出できます。 いろいろ調べてもよくわからず、煮詰まっています。 次回検査日をテーブルに定義するしかないのでしょうか? よろしくお願いします。

  • pgmr
  • お礼率100% (2/2)

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

  • ベストアンサー
回答No.1

確かめたわけではないですが、下記の式だとどうでしょうか。 strSQL = "select 次回検査日 from 管理台帳クエリ where CDate(次回検査日) <= #" & txtDate & "#" あるいは、 strSQL = "select 次回検査日 from 管理台帳クエリ where 最終検査日 <= DateAdd("yyyy",-[検査周期], #" & txtDate & "#)"

pgmr
質問者

お礼

ご回答ありがとうございます。 CDate関数の使用ですが、ダブルクオーテーションでくくられたSQL文の中にVBA関数を記述しても、機能しないようです。 DateAdd関数については、SQL構文の外に出して、 strSQL = "select 次回検査日 from 管理台帳クエリ where 最終検査日 <= " DateAdd("yyyy", -RS1!検査周期, txtDate) と書けばうまくいくかもしれません。 ただこれだと2回SQLを実行(1回目は検査周期の抽出)しなければならないですね。それでも単純な計算式にもかかわらずテーブルにフィールドを増やさなければならないという無駄よりは、ましかもしれませんが‥。

pgmr
質問者

補足

もしや、と思って、クエリのフィールドの式を 次回検査日: 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文に不備はないような気がしますけれども‥。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

#1さんの回答へ横レスさせて下さい 文字列中に”を含めたい場合は、2重に書くとOKです。 strSQL = "select 次回検査日 from 管理台帳クエリ where 最終検査日 <= DateAdd("”yyyy””,-[検査周期], #" & txtDate & "#)"

pgmr
質問者

お礼

ご回答ありがとうございます。 やはり最終検査日を条件として次回検査日を抽出するしかないようですね。 hatena1989様への補足でも書きましたが、 クエリに式を入れて、それを抽出・ソート条件に使うと、どうも誤動作するような感じです。 最終検査日を使って抽出がうまくいったとしても、次回検査日でのソートがおかしくなってしまい、お手上げ状態‥。 最終検査日に1年か2年か3年を足すだけの次回検査日を、わざわざ台帳マスタにフィールド定義するのが野暮な感じですけれども、仕方がないので定義しました。 台帳に実在するフィールドのクエリですと、抽出・ソートとも正常に動作しています。 仕様の限界なのかもしれません。

関連するQ&A

  • accessクエリの抽出条件

    access初心者です。 フィールド:「年」 数値型 フィールド:「月」 数値型 があり クエリの抽出条件に 年:2001 月:11 でクエリが実行できます。 これを当月分をクエリ実行できるように 年:year(date()) 月:month(date()) のように入れて当月のレコードを抽出したいのですが 「式に未定義関数dateがあります」というメッセージが出ます。どこが間違っているか助言をいただけると助かります。

  • ACCESS2000でクエリを抽出条件で抽出

    VBA上でクエリの抽出データを取得してファイルに書き込むというプログラムを書いております。 抽出条件として、今日の日付のレコードを取得したいのですが型が一致しませんとエラーになります。 strSQL = "SELECT * FROM " & (クエリー名)& " where (クエリー.カラム名)='" & Format(Date, "yyyy/mm/dd") & "'" クエリーのカラム名は全角漢字です。 どこがおかしいのでしょうか? よろしくお願いいたします。

  • AccessのクエリでvbLfのみ抽出するには

    Access2010のクエリー(SQL)で vbLfかvbCrLfが含まれているレコードを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(10) & "*"; vbLfが含まれているレコードは抽出せず、 vbCrLfが含まれているレコードだけを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(13) & Chr(10) & "*"; でよいと思いますが、 vbCrLfが含まれているレコードは抽出せず、 vbLfが含まれているレコードだけを抽出するには、 どのように記述すればよいのでしょうか。 よろしくお願いします。

  • アクセスのクエリ抽出について

    アクセスで、テキストデータを開き クエリウィザードからフィールドの抽出条件として 文字が含まれているものと文字が含まれていないものと それぞれ抽出したいのですが Likeの式から抽出出来るのでしょうか? なにかの文字を含んでるデータに対しては 抽出できるのですが、うまく抽出出来ません。 下記のようなイメージで抽出したいと思ってます。 例 データ合計5件    "00000001234-23 " "12345672-1-2 " "" "55145672-1-3-2 " ""    データあり3件    "00000001234-23 " "12345672-1-2 " "55145672-1-3-2 "    データなし2件    "" "" 宜しくお願いします。

  • アクセスクエリ ハテナを抽出するには

    テーブルは 文字(フィールド) ? あ となっていて、 クエリで SELECT [テーブル1].文字 FROM テーブル1 WHERE ((([テーブル1].文字) Like "?")); とすると、 ? あ が抽出されます。 ?がワイルドカードとなり、1文字の文字列を抽出する、という条件になってしまったためだと思われますが、ワイルドカードではなく、ハテナとして抽出したい場合はどうすればいいでしょうか? エクセルのように、Like "~?"としたら、何も抽出されませんでした。

  • Access 計算フィールドに対するクエリの抽出について

    初歩的な質問かもしれませんが、お願いします。 クエリで、計算を出した列に対して抽出をかけることはできないのでしょうか。 [商品CD][商品名][単価][個数] と、4つの列フィールドを選択クエリに表示し、 5列目に以下のフィールドを挿入しました。 式1: [単価]*[個数] この“式1”に対して1,000以上のレコードを抽出かけたいのです。 >=1,000 と抽出条件に入れてもダメです。 どうしてでしょうか。 また、どうすればいいのでしょうか。

  • ACCESSでの抽出について

    単純なクエリの抽出なのですが・・・。 区フィールド、町フィールドをクエリで作成して そのクエリを元に抽出フォームを作成しました。 そして、クエリの抽出条件に以下の式を入力しました。 Like "*" & [Forms]![F_抽出]![区] & "*" Like "*" & [Forms]![F_抽出]![町] & "*" しかし、大本のデータに [区]フィールド→品川区 [町]フィールド→空白 ・・・と、どちらかが空白の場合、そのレコード を抽出してくれません。 このように、空白フィールドを持つレコードをも 抽出するにはどのようにしたらようですか? 初歩的な質問で申し訳ありませんがよろしくお願いいたします。

  • アクセスのクエリ 1文字以上を抽出

    アクセスのクエリの抽出条件で、「1文字以上」とする方法を教えてください。 抽出条件をビルドで作ってみたのですが、 勝手にダブルコーテーションがついてしまいます。 1文字以上の値はあるのに何も抽出されません。 sql文は SELECT [テーブル1].[フィールド1] FROM テーブル1 WHERE ((Len([テーブル1]![フィールド1])>"1")); となっています。 ご教授よろしくお願いします。

  • アクセスのリレーションシップとクエリ

    私は、アクセスの初心者です。なので、難しいことはよく分からないのですが、アクセスではある1つのフィールドをキーにしてくっつけたりすることができるじゃないですか?そのキーを設定したりするのはリレーションシップでも、クエリでも同じような感じで行うと思うのですが、その2つの違いはクエリはそれをテーブルとして表示できるのに対して、リレーションシップはただ定義するしかできずテーブルとして表示はできないのでしょうか? あと、クエリとかである条件で抽出したテーブルの1つのフィールドのSUMを出したいのですがどういった条件式を書けばいいのでしょうか? なにぶん、初心者ゆえに質問が分かりにくいと思いますが、どうかよろしくお願いします。

  • ACCESSのクエリ:抽出条件で型が一致しません

    ACCESSでクエリを作ったのですが 実行すると、 「抽出条件で型が一致しません」のエラーが出ます 問題となっているヶ所は テーブルのフィールド定義がバイナリーになっています そして、クエリで   フィールド   テーブル   並べ替え   表示   抽出条件   または となっていますが、 この抽出条件に、1、を入れました テキスト型なら、"1" 数値系型なら、1、でいいのか、と思ったのですが バイナリ型は別の表現があるのでしょうか よろしくお願いします