プロが教える店舗&オフィスのセキュリティ対策術

会社のDBにACCESSで繋いで必要な資料を作成しています。そのDBの日付の書式がyyyymmddの型になっていて、クエリの抽出条件でdate()と入力しても上手くいきません。そのために、left(date,4)&"/"&mid(date,5,2)&"/"&right(date,2)としてyyyy/mm/ddの型に直して抽出しています。このやり方だとクエリの実行にとても時間がかかります。yyyymmddのままでパラメータを指定して20070630と入力すると10秒かからずに表示されますが、yyyy/mm/ddの型に直してdate()にすると3分近くかかります。yyyymmddのままでdate()を使う方法はありますか?

A 回答 (2件)

クエリの抽出条件の方を


=Format(Date(),"yyyymmdd")
としたら、いかがですか?
    • good
    • 0
この回答へのお礼

お礼が遅くなってすいません。とても早くなりました。私自身の教えてgooの中でも1,2を争うベスト回答です!とても助かります。有難うございました。

お礼日時:2007/07/06 10:38

> パラメータを指定して20070630と入力すると10秒かからずに表示されます



もしかしたら、その日付のデータ型が、日付型ではなくテキスト型になっている
のではないでしょうか。

クエリの抽出条件を、以下の式にしてみて下さい;
CStr(Date())
もしくは
Replace(CStr(Date()),"/","")

多分、保存されたデータ内に「/」は含まれていない(表示時に「書式」の設定で
追加されている)ものと思いますので、後者の方がクエリの実行速度は速いの
ではないかと思います。
(但し、今回Access2003で確認して問題なかったものの、以前97か2000で試した
 際には、クエリでReplace関数のはエラーになったような気もするのが・・・(汗))
    • good
    • 0
この回答へのお礼

お礼が遅くなってすいません。おっしゃるとおりテキスト型です。以前のDBでは日付型になっていて、今回なぜテキスト型にしたのか明確な説明は無かったのですが今さら変更するのもややこしそうなのでこのまま使うしかありません。CStr(Date())に変えて少し早くなりました。データ量もかなり多いのでこのまま使おうと思います。ACCESS2000ではReplaceは未定義関数といわれましたので使えませんでした。
どうも有難うございました。

お礼日時:2007/07/06 09:48

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