こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ACCESS97 日付での検索

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です。

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

投稿日時 - 2002-09-18 13:14:41

QNo.361156

GA1

困ってます

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

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=2001年問題%20VB

投稿日時 - 2002-09-18 13:35:47

お礼

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

余談ですが、この回答を見る前にマイクロソフトサポート技術技報を見ました。
そこには回避策として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:59

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問