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

解決済みの質問

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”のように違ってしまうのはなぜでしょうか。

ちょっと分かりにくいかもしれませんがよろしくお願いします。

投稿日時 - 2005-03-03 00:00:49

QNo.1247485

困ってます

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

自宅にACCESSがないのではっきりとはわからないのですが。。。

Windowsの時刻の表示設定の影響を受けていることはありませんか?
Windows2000が「H:mm:ss」の24時間形式、
WindowsNT4.0が「tt hh:mm:ss」の12時間形式になっている場合があります。
デフォルトの設定は異なりますが、コントロールパネルの「地域」の設定でそれぞれ変更可能です。

ちなみに、どのようなコードか分からないのではっきりしたことは言えませんが、
時間型フィールドを時間型のまま(文字型などの変換せず)取り扱っていれば、基本的には表示形式に関係なく取り扱えるはずです(内部に保持されている形式は同じなので)。

投稿日時 - 2005-03-03 01:36:54

補足

ご回答ありがとうございます。

パソコンBの時刻表示形式を“H:mm:ss”に設定したらうまく処理できました。

>時間型フィールドを時間型のまま(文字型などの変換せ
>ず)取り扱っていれば、基本的には表示形式に関係なく
>取り扱えるはず

そうだったんですね。知りませんでした。
ですが今回の場合はOSの表示形式を変えることで解決しました。

コードでやっている処理内容は、
integer型h,m,sの変数それぞれにh←H、m←m、s←sを別々に格納し、場合分けにより、たとえば「午後7時半」というstringを作るというものです。

投稿日時 - 2005-03-03 12:07:30

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

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

回答(2)

ANo.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の発行で失敗しているのであれば、先述の書式を統一する方法で回避できそうですが。

投稿日時 - 2005-03-03 03:39:31

お礼

ご回答ありがとうございます。

SQLで直接時刻型の処理をさせているわけではありませんが、OSの表示形式を統一させたらきちんと処理されました。

処理の内容は、たとえば“19:30:00"の場合、
integer型変数hに19、mに30を代入し場合分けで“午後7時30分"などの文字列を作るものでした。

>Format(datHiduke,"yyyy/m/d") あるいは、Format(datJikoku,"h:mm")
いろんなOSで使うことを考えて、この宣言をしておけば安心なんですね。

投稿日時 - 2005-03-03 12:22:41

あなたにオススメの質問