SQLのBetween...And 演算子が、Win98では働かないのですが

解決


マロン  2005-09-17 00:44:07  No: 125433

[開発環境 Win98/XP,VB6SP6]

いつもお世話になります。
今回は、VBからのデータベースの操作についてお尋ねします。
データベースは、DAOによりMDBファイルを操作していますが、ある疑問が発生しました。

1つのテーブルの中に例えば、記録日時(型:Date/Time)というレコード
を設け、データを検索表示させる場合の検索項目の一つにします。

レコード:記録日時には例えば、2005/09/01 10:11:12 というように、日付と時刻が
記録されています。
そして、記録日時の範囲を年月日で指定し、それに合致するデータのみを抽出するという作業を、
SQLのBetween...And 演算子を用いて行っています。

ところが、私の開発環境であるWinXPではこの演算子がきちんと働いてくれますが、
Win98では、全然無視されて記録日時の設定は結果に反映されません。

MSDNを見ても、OSによる動作の違いなどは書いてないようですが、
考えられる原因として何かありますでしょうか。


medaka  2005-09-17 01:34:47  No: 125434

DAO、MDACのバージョンが違うとか


いな  2005-09-17 01:42:29  No: 125435

>ところが、私の開発環境であるWinXPではこの演算子がきちんと働いてくれますが、Win98では、全然無視されて記録日時の設定は結果に反映されません。

WinXPとWin98では同じSQLを発行しているということを確認しましょう
環境によっては同じプログラミングを流しても、
結果が異なる
(.Valueや.textを省略して記述しているときなどもそうですが)
場合がありますので、

同じSQLを実行した上で、
全然無視されて記録日時の設定は結果に反映されません。

なのでしょうか?


いな  2005-09-17 01:44:06  No: 125436

すいません途中で投稿してしまった、

>SQLのBetween...And 演算子を用いて行っています。

を特定した
理由が書かれていないのが怪しいので、
その判断根拠を教えてください。


特攻隊長まるるう  2005-09-17 01:57:03  No: 125437

>WinXPとWin98では同じSQLを発行しているということを確認しましょう
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200504/05040068.txt
↑こーゆー事もありますからねぇ(^^;)


いな  2005-09-17 02:03:41  No: 125438

>http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200504/05040068.txt
>↑こーゆー事もありますからねぇ(^^;)

あ〜〜そうそう、これこれ、見つけたかったリンクだ・・・。
打ち合わせ呼ばれて探しきれなかったのさフォローありがとうございます。


マロン  2005-09-17 07:12:29  No: 125439

皆様、本当にありがとうございます。

http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200504/05040068.txt

の中の、

http://support.microsoft.com/default.aspx?scid=kb;ja;413604

に書いてあることがヒントで、無事解決しました。

以下、microsoftのサポートページより

  ■現象
  Date 関数や Now 関数により取得したシステム日付を文字列型で保存する場合、
  文字列の書式を考慮していないプログラムでは以下のような現象が発生することが
  あります。
  • 環境により年月日の順序や桁数が異なる。  
  • 西暦 2000 年以降、年の桁数が 2 桁から 4 桁になる。  

  ■原因
  Visual Basic における日付データの文字列としての書式は、オートメーション
  ライブラリのバージョンや、コントロールパネルの設定により異なります。
  そのため、書式が固定されていることを前提に設計されているプログラムが日付を
  正しく処理できないことがあります。

  ■対処方法
  Format 関数により日付文字列の書式を固定することで、環境の違いに影響されない
  プログラムが作成できます。

ということで、日付を私のXPと98で確認したら、

    XP  →  2005/09/01 10:11:30
    98  →  05/09/01 10:11:30

と処理されていました。
ですので、内部での処理を例えば  Format(MyDate, "YYYY/MM/DD hh:mm:ss")  というように
書式を固定することで、無事解決しました。

ところで、Format(MyDate, "YYYY/MM/DD hh:mm:ss")  という設定は、どのような
環境にも対応できるんでしょうか。一応私の環境では、これまでの問題は出なくなりました。


ひろ  2005-09-17 22:00:33  No: 125440

Format関数の書式指定文字列の / と : はコントロールパネルの設定が反映されるので、常に / と : で区切りたいなら \ でエスケープして分指定を nn にして

Format(MyDate,"YYYY\/MM\/DD hh\:nn\:ss")

ですね。

# mmは前に:が無い場合は「分」ではなく「月」になるので、\:を使う場合は nn を指定しなければなりません


マロン  2005-09-18 01:51:49  No: 125441

なるほど、コントロールパネルの設定で / と :  は変化するんですね。
内部での処理を  Format(MyDate,"YYYY\/MM\/DD hh\:nn\:ss")  に変更
して動作確認をしましたが、今回の問題点は解決されたようです。

ひろさん、そして他の皆さん、ありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加