Page 195 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼日付項目のクエリー抽出 ねこぽん 03/2/10(月) 13:25 ┗Re:日付項目のクエリー抽出 しろくろやぎ 03/2/10(月) 20:19 ┗Re:日付項目のクエリー抽出 ねこぽん 03/2/12(水) 9:20 ┗Re:日付項目のクエリー抽出 こうちゃん 03/2/12(水) 13:08 ┗Re:日付項目のクエリー抽出 ねこぽん 03/2/12(水) 15:07 ┗Re:日付項目のクエリー抽出 こうちゃん 03/2/12(水) 15:21 ┗Re:日付項目のクエリー抽出 ねこぽん 03/2/12(水) 17:11 ─────────────────────────────────────── ■題名 : 日付項目のクエリー抽出 ■名前 : ねこぽん ■日付 : 03/2/10(月) 13:25 -------------------------------------------------------------------------
請求書テーブルの印刷日項目で抽出内容と一致する内容をクエリーで抽出しているのですが、単純に指定すると抽出するのですが、抽出条件に「IIF...」で指定すると一件も抽出されません。 請求書テーブル・印刷日 【日付/時刻型 書式は日付(S)】 抽出画面フォーム・印刷日From 【テキスト 書式は日付(S)】←2003/01/20を入力 抽出画面フォーム・印刷日To 【テキスト 書式は日付(S)】←2003/01/30を入力 データ5件分の印刷日の内容は null,null,2003/01/20,2003/01/21,2003/01/30 抽出条件「Is Null」→ 結果2件 抽出条件「Between 抽出画面フォーム・印刷日From and 抽出画面フォーム・印刷日To 」→ 結果3件 抽出条件「IIF(抽出画面フォーム・印刷日From Is null,Is Null,Between 抽出画面フォーム・印刷日From and 抽出画面フォーム・印刷日To) 」→ 結果0件 IIF文で作成するとFrom to に日付を入力しても、未入力でも0件になります。 0件になってしまう原因を教えて下さい。 |
▼ねこぽん さん: >抽出条件「Is Null」→ 結果2件 この場合はNullかどうかの判定を行いますが、 >抽出条件「IIF(抽出画面フォーム・印刷日From Is null,Is Null,Between 抽出画面フォーム・印刷日From and 抽出画面フォーム・印刷日To) 」→ 結果0件 > こちらで仮に印刷日FromがNullだったとすると、抽出条件は "Is Null"という文字列と一致するか? という事になるのではないですか? |
しろくろやぎ さん 回答をありがとうございます。 文字列になっているのではというアドバイスですが、 >>抽出条件「IIF(抽出画面フォーム・印刷日From Is null,Is Null,Between 抽出画面フォーム・印刷日From and 抽出画面フォーム・印刷日To) 」→ 結果0件 >> >こちらで仮に印刷日FromがNullだったとすると、抽出条件は > "Is Null"という文字列と一致するか? >という事になるのではないですか? IIF文にすると印刷日FromとToに正しい値を入れても結果が0件になります。 もし、"Is Null"という文字列で判別するのだとしたら 数値タイプの項目を、同じようにIF文の中で判定するIs Nullは正しい結果を抽出するのです。 |
ねこぽんさん、しろくろやぎさん、こんにちは 横レス失礼します。 印刷日Fromと印刷日Toがフォーム上のテキストボックスとすると、Between条件中のFromおよびToを自動変換をたよりに指定しているようなので、2003/1/20のように指定されると、場合によって文字列範囲検索してしまい、対象件数0件になる場合がありますね。 ちなみに当方で試験したクエリを以下に書いてみますね。 抽出画面フォームに印刷日Fromおよび印刷日Toというテキストボックスがあり、請求書テーブルに印刷日というフィールドがある場合、以下のようなクエリで試験してみてください。 (SQLビューに直接貼り付けてみてください) SELECT 請求書テーブル.印刷日 FROM 請求書テーブル WHERE (((IIf(IsNull([forms]![抽出画面フォーム]![印刷日From]),([請求書テーブル].[印刷日]) Is Null,([請求書テーブル].[印刷日]) Between [forms]![抽出画面フォーム]![印刷日From] And [forms]![抽出画面フォーム]![印刷日To]))<>False)); 的外れなことを言っているようならごめんなさいね^^; #IsNull([forms]![抽出画面フォーム]![印刷日From]) は [forms]![抽出画面フォーム]![印刷日From] Is Null でも動作しますが、こちらが正しい書き方のような・・ |
こうちゃん さん、しろくろやぎさん ありがとうございました。 (こうちゃんさん、いつも助けていただきありがとうございます。) >横レス失礼します。 > >印刷日Fromと印刷日Toがフォーム上のテキストボックスとすると、Between条件中のFromおよびToを自動変換をたよりに指定しているようなので、2003/1/20のように指定されると、場合によって文字列範囲検索してしまい、対象件数0件になる場合がありますね。 > #2003/1/20#囲みで直接記述するとうまくいくのですが、テキストボックス指定だと駄目でした。 別のPGMでは(Access97)ではうまく動いていたのですが。。。 >ちなみに当方で試験したクエリを以下に書いてみますね。 >的外れなことを言っているようならごめんなさいね^^; > いいえ。的外れどころかビンゴでした。 何度テストしてもうまく抽出しているようなので大丈夫だと思います。 ちなみに最後に付いている「<>False」とは、どのような意味でついているのでしょうか? 教えていただけませんか? |
ねこぽんさん、こんにちは >ちなみに最後に付いている「<>False」とは、どのような意味でついているのでしょうか? Where条件を設定する場合、クエリデザインで抽出条件にVBAの関数を使用する複雑な式を直接指定できません。 そこで「式」を設定して、その式の結果がTrueの場合に出力する、という抽出条件をつけます。 SQLビューで「<>FALSE」を指定しなくても、アクセスが勝手につけちゃいます。 今回は試験・確認をザインモードでも行いましたので、アクセスさんに勝手につけられちゃいまして、それをそのまま書き込んじゃいました。 作成したクエリをデザインモードで確認してみてくださいね。 |
解りました。 こうちゃん さん ありがとうございました。 |