重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

クエリでの抽出条件について
クエリで納品がまだ済んでいない物件について、抽出期間を設定して抽出したいのですが、うまくいかず教えてください。
抽出したいフィールドは、[納品日]、[部署]、[変更]の三つです。
フィールド[変更]は、[納品日]が変更になることがあるので、[納品日変更]というフィールドに日付が入っていたら、[変更]に[納品日変更]の日付が入るように、[納品日変更]に何も入っていなかったら、[変更]に[納品日]の日付が入るように、判定式を入れています。
[変更]の動作は、目的通りになっており問題無いのですが、いざ[納品日]、[部署]、[変更]で抽出条件を入れるとうまくいきません。
抽出条件の所に
[納品日]には、Is Null
[部署]には、抽出したい部署名
[変更]には、Between #2010/04/01# And #2010/05/31#
それぞれAndで組んで入れていますが、何も抽出されません。

[納品日]の、Is Null と
[部署]の、抽出したい部署名
のふたつだけでやると、[納品日][部署]での抽出は動作します。

しかし、この二つに[変更]をプラスし、期間を追加するとダメなようです。

[変更]のように、判定式で作ったフィールドは、抽出条件に使ってはいけないのでしょうか?
それとも抽出条件のAndは二つまでとか制限があるのでしょうか?

全く別の基本的な問題が原因だと思うのですが、教えて頂きたく。

A 回答 (7件)

納品日にデータあれば納品日、ただし変更されていればその納品日変更分で抽出というのであれば前回答の指摘にある納品日をNULL抽出させている条件が怪しいです。

NULL以外に修正して下さい。納品日変更以外はうまくいったというのも見直す必要あります。
    • good
    • 0
この回答へのお礼

出来ました。!!
Nullがダメだったようです。
本当にありがとうございました。
たすかりました。

お礼日時:2010/05/24 20:29

納品日と部署のクエリがうまく出来ているので、それと別にその結果から変更だけ判定のクエリと2段階で実施すると期待している結果は出るはずです。



本来の1つのクエリ、での原因は上記の結果でヒントが見えると思います。

納品日変更には今何も値が無いですか?、そんな気がします。納品日変更のIF文編集された結果でBETWEEN抽出条件が実行されてない、と思っています。
クエリで納品日の右側に納品日変更を用意してますよね?。
    • good
    • 0

> [変更]のように、判定式で作ったフィールドは、抽出条件に使ってはいけないのでしょうか?



そのクエリをSQLビューで見た時、WHERE の [変更] 部分はどうなっているのでしょうか。
IIf([納品変更日] Is Null,[納品日],[納品変更日]) Between #4/1/2010# And #5/31/2010#
なら大丈夫なような気がします。


> [納品日]が変更になることがあるので、[納品日変更]というフィールド・・・

> 納品日に対する抽出条件Between #2010/04/01# And #2010/05/31#はキチンと動作していることは確認しています。

からは、[納品日]が埋められている(設定されている)ように読み取れもしますが、

抽出条件のところに、
> [納品日]には、Is Null
を書くことがあるのかな???

[納品日]が埋められていて、And なら、0 件だよね ???


> ・・・のふたつだけでやると、[納品日][部署]での抽出は動作します。

ということなら、期間を指定する必要はなさそうだし・・・


[納品日]、[納品日変更]がどのような設定になっているかで、回答は変わってくると思います。

この辺りを補足されると、回答が得られやすくなると思います。
    • good
    • 0

(1)IIf([納品変更日] Is Null,・・・・・


(2)IIf([納品変更日]="",・・・・・・・
(3)IIf(LEN([納品変更日]) =0,・・・・
どれも見た目何も入っていない項目に対しての判定です。
やっている(1)だけでは不十分なのかもしれないので、
これらを試してみましょう、ということです。

組み込みは、これらそのまま貼り付けずに、全角半角やら体裁を整えてからお願いします。

「納品日」項目に対して
Between #2010/04/01# And #2010/05/31#
の条件を行ったとき成立しますか。
それなら「納品日」項目に対しての動きは問題ないということになると思われます。

この回答への補足

はい、組み込みは手入力で確実に入力しました。

納品日に対する抽出条件Between #2010/04/01# And #2010/05/31#はキチンと動作していることは確認しています。

[変更]はキチンと動作しているが、[変更]がおかしいという事になりますか?

補足日時:2010/05/23 20:20
    • good
    • 0

>[変更]にはきちんと私が望む様に、日付ははいっているのですが、


>変更:IIf([納品変更日] Is Null,[納品日],[納品変更日])
>の式が原因の気がします。

データが原因なのか式が原因なのかはっきりさせないといけないのですが、
[納品変更日] をそのまま出力させる項目と
判定:IIf([納品変更日] Is Null,[納品日],IIf([納品変更日]="",[納品日],IIf(LEN([納品変更日]) =0,[納品日],[納品変更日])))
と、
ここまでチェックしてみてどうでしょうか。
この3種類の判定条件をそれぞれ別項目で判断してどれを適用したら良いか。
こういうところから見るくらいでしょうか。

この回答への補足

ありがとうございます。

教えて頂いた式を入れた判定フィールドを追加してみました。
納品変更日が入っているレコードは、判定が#エラーとなりました。その他は、キチンと納品日が入力されました。

納品変更日2のフィールドを追加し、納品変更日を出力しましたが、キトンと納品変更日は出力されています。

この結果から、どう進めていったら良いでしょうか?

補足日時:2010/05/23 19:59
    • good
    • 0

こちらで確認した中では、原因として2パターンが考え得るようです。



a)[変更]のデータ型が日付/時刻型以外の場合、そのままでは
 「Between A And B」の形では抽出できません。
 この形で抽出条件を指定するためには、
  ・テーブルのデザインビューで[変更]フィールドのデータ型を変更、
  ・CDate関数でデータ型を変換したフィールドに抽出条件を指定、
 といった方法を採ります。

<クエリのデザインビューでCDate関数を使用して変換する場合>
 【現在】
  『フィールド:』欄 変更
  『テーブル:』欄  (テーブル名)
 【修正】
  『フィールド:』 欄 変更日: CDate([変更])
  『テーブル:』欄  (空白のまま)

b)Accessのヘルプには、以下のような記述があります:
 http://office.microsoft.com/ja-jp/access/HP01032 …

> 引数 criteria に日付リテラルを指定する場合は、日本語版の Microsoft Jet
> データベース エンジンであっても米国形式で指定する必要があります。
> たとえば、1996 年 5 月 10 日を指定する場合は、「5/10/96」のように米国
> 形式で表します。

ですので、[変更]の抽出条件を、以下のようにしてみて下さい:
 Between #04/01/2010# And #05/31/2010#


【余談】
こちらで検証した中では、クエリのデザインビューでは「#2010/05/31#」の形で
指定しても、問題なく抽出される場合がありました。
ただ、これで抽出が正しく行われるパターンの場合は、SQLビューに切り替えると
日付の抽出条件も自動で「#5/31/2010#」に切り替わる(デザインビューに戻す
と元に戻る)、という結果になりました。
一方、抽出されないクエリをSQLビューに切り替えると、抽出条件はクエリで指定
したのと同じ「#2010/05/31#」の形となっていました。
この、自動で変換されたりされなかったりする現象の再現条件については、残念
ながら確認できていません(汗)
「クエリでの抽出条件について」の回答画像2
    • good
    • 0

Access だと思いますので試しにやってみましたが下記のSQL文で動作しました。


テーブル名はテーブル1となっています。

SELECT テーブル1.* FROM テーブル1 WHERE (納品日 Is Null) AND (部署="製造部") AND (変更 Between #2010/04/01# And #2010/05/31#);

特別問題のある使い方ではないと思いますが・・・

この回答への補足

早速、お返事ありがとうございます。
私も問題無いと思うのですが・・。
以下の[変更]の式でもう一度そちらで試して貰えますか?

[変更]を
変更:IIf([納品変更日] Is Null,[納品日],[納品変更日])

[納品変更日]が空なら[変更]に[納品日]を、空でなければ[変更]に[納品変更日]という内容です。

[変更]にはきちんと私が望む様に、日付ははいっているのですが、
変更:IIf([納品変更日] Is Null,[納品日],[納品変更日])
の式が原因の気がします。

上記のような変更でも同じSQL文でそちらでも動作しますでしょうか?

[変更]を上記式でなく、直接日付を入れてやると上記SQL文で動作することは先ほど確認しました。
[変更]を式としている時だけ、抽出が出来ない感じです。

補足日時:2010/05/23 13:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!