• ベストアンサー

ACCESS フィールドのデータ型

パソコンA(Windows2000・ACCESS2000)で作ったデータベースを、のパソコンB(WindowsNT4.0・ACCESS2000)に移して実行したところ、うまく動きません。 パソコンAで作ったデータベースの時間型フィールドでは表示形式が“19:30:00”というようにhh:mm:ss形式をとるのですが、パソコンBに移したとたん“午後7:30”というような表示に変わってしまいます。 パソコンAでは“19:30:00”という形式のデータをもとにコードを書いているので、“午後7:30”という形式では当然エラーになります。 そこでフィールドの書式に「hh:mm:ss」と入力して強制的に“19:30:00”という表示にさせたのですが、それでも処理はうまくいかないのです。 こういう場合はどう対処すればいいのでしょうか。そもそも同じ時間型にしてもデフォルトで“19:30:00”や“午後7:30”のように違ってしまうのはなぜでしょうか。 ちょっと分かりにくいかもしれませんがよろしくお願いします。

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

  • ベストアンサー
回答No.1

自宅にACCESSがないのではっきりとはわからないのですが。。。 Windowsの時刻の表示設定の影響を受けていることはありませんか? Windows2000が「H:mm:ss」の24時間形式、 WindowsNT4.0が「tt hh:mm:ss」の12時間形式になっている場合があります。 デフォルトの設定は異なりますが、コントロールパネルの「地域」の設定でそれぞれ変更可能です。 ちなみに、どのようなコードか分からないのではっきりしたことは言えませんが、 時間型フィールドを時間型のまま(文字型などの変換せず)取り扱っていれば、基本的には表示形式に関係なく取り扱えるはずです(内部に保持されている形式は同じなので)。

tanatetsu
質問者

補足

ご回答ありがとうございます。 パソコンBの時刻表示形式を“H:mm:ss”に設定したらうまく処理できました。 >時間型フィールドを時間型のまま(文字型などの変換せ >ず)取り扱っていれば、基本的には表示形式に関係なく >取り扱えるはず そうだったんですね。知りませんでした。 ですが今回の場合はOSの表示形式を変えることで解決しました。 コードでやっている処理内容は、 integer型h,m,sの変数それぞれにh←H、m←m、s←sを別々に格納し、場合分けにより、たとえば「午後7時半」というstringを作るというものです。

その他の回答 (1)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

データベースプログラミングにおいて日付や時刻型のデータを扱う場合は、その書式に常に留意する必要があります。例えば、日付ですと ・yyyy/m/d  ・yy/m/d  ・d/m/yyyy などの様々な書式がありますが、これらの書式が混在するSQLが発行されると思わぬ結果を招きます。 (例)...WHERE Hiduke BETWEEN #2/3/2005# AND #2005/3/5#; まあ、これは極端で考えにくいパターンですが、恐らくこのSQLはまともな結果を返さないでしょう。これは、#1 rotesKomet さんがコメントされておりますとおり、OSの違い、その設定の違いなどPC環境の違いによって、日付・時刻を表す書式が異なりますので、これがトラブルの元になる可能性は常にあります。 Win2KではOKだが、Win9XではNG となる事例は私も経験があります。日付・時刻の書式を統一しないでコーディングしたSQLで意図した結果が得られていたとすれば、それは「偶然」と考えた方が良いでしょう。時刻についても同様のことが言えます。 したがって、日付・時刻型データをコードで扱う際には、OSの差や設定の差を収束させるためにも必ず Format(datHiduke,"yyyy/m/d") あるいは、Format(datJikoku,"h:mm") のように書式を明示的に指定し、統一する必要があります。 >...“19:30:00”という形式のデータをもとにコードを書いているので、 >“午後7:30”という形式では当然エラー... 表示上の書式が“19:30:00”であれ、“午後7:30”であれ、アプリケーション内部でのデータとしてはシリアル値で扱われます。どのようなエラーが発生するのでしょう? SQLの発行で失敗しているのであれば、先述の書式を統一する方法で回避できそうですが。

tanatetsu
質問者

お礼

ご回答ありがとうございます。 SQLで直接時刻型の処理をさせているわけではありませんが、OSの表示形式を統一させたらきちんと処理されました。 処理の内容は、たとえば“19:30:00"の場合、 integer型変数hに19、mに30を代入し場合分けで“午後7時30分"などの文字列を作るものでした。 >Format(datHiduke,"yyyy/m/d") あるいは、Format(datJikoku,"h:mm") いろんなOSで使うことを考えて、この宣言をしておけば安心なんですね。

関連するQ&A