プロが教えるわが家の防犯対策術!

ACCESSのプログラム、日付でデータを検索する場合次に様に書いています

DIM DATEissu AS DATE

DATEissu="02/09/01" ' テスト

SET RS=DB.OPENRECORDSET("SELECT * FROM A_TABL WHERE 日付 = #" & DATEissu & "#")

この検索で、データがあるにもかかわらず抽出が出来なくなりました。
デバッグでデータを参照しても異常はないようです。
コントロールパネル-地域-日付で短い形式を yyyy/MM/DD に設定しなおすと問題なく抽出できますが、日付の欄の幅等の設定をやり変えねばなりません。
形式を yy/MM/DD に設定すると抽出されなくなります。


OSはウィンドウ98です。

プログラムの作り方が悪いのか、他に原因があるのか知っている方お教えください。
このような事が起こらないプログラムの書き方知っている方お教えください。

A 回答 (1件)

DATEissu="02/09/01" ' テスト



SET RS=DB.OPENRECORDSET("SELECT * FROM A_TABL WHERE 日付 = #" & DATEissu & "#")

のDATEissuの日付の解釈が、mm/dd/yyになってしまっています。つまりこの場合は日付が、2001年2月9日に一致するもの、という検索条件になってしまっています。

いわゆる、VBの2001年問題といわれるもので、この場合は、
SET RS=DB.OPENRECORDSET("SELECT * FROM A_TABL WHERE 日付 = #" & Format$(DATEissu,"yyyy/mm/dd") & "#")
とするとうまく行くと思います。
日付を渡すところはうまくユーザー関数を作ってやると、毎回Format関数を書くよりも便利です。

参考URL:http://www.google.com/search?num=50&lr=lang_ja&q …年問題%20VB
    • good
    • 0
この回答へのお礼

早速のご回答どうもありがとうございます。
試すと問題なくデータの抽出できました。

余談ですが、この回答を見る前にマイクロソフトサポート技術技報を見ました。
そこには回避策としてFORMAT関数で"mm/dd/yy"にする
又は西暦を4桁で扱うとありました。

FORMAT関数を利用しましたがうまくいきません
調べると下記のようになっていました

DateFrom = Format$("02/01/01","mm/dd/yy")
DateTo = Format$("02/12/31","mm/dd/yy")

DateFrom -- 01/01/02
問題なし
DateTo -- 02/12/31
????

わけが判らなく、年号を2桁で表示するのをあきらめていましたが、助かりました。

お礼日時:2002/09/19 09:30

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