日付型ってなんですか?扱いにくいからやめたほうがいいって聞いたんですが...もう過ぎ去った感もありますが2000年問題。なんでこんな問題が起きたかというと、西暦の上2桁は19だという間違った常識がいつのまにかできあがってしまっていたからです。なぼなんざ,、しばらくの間は書類書くとき「2001」と書かなければいけない日付欄に「19」と書いてしまいあわてて修正液を探しておりましたですよ。(間抜け)まぁ最近は手でモノを書く機会も減りましたので(汗)そういうことはなくなりましたが...それはコンピュータ業界の話ではなく、一般的な生活の中にも数多くありますよね。身の回りの品物で日付が刻印されているものは結構あるはずですが、その中で年を4桁で表示しているものがどれだけありますか?人間が見る分には、「きょうは1999年だから99年は今年だよね」と頭の中に置き換えルーチンができていて、自分でも知らないうちに判断しているのですが、コンピューターはそうはいきません。その品物が100年たってもまだ現役で使われていたらどうしますか?いつの99年だかもうわかりませんよね。実際は100年以上使うかもしれない品物には年を4桁で表示しますからそんなことはないんですが。ここに、2000年問題の原点があります。昔のコンピュータ技術者は、みんな「こんなシステム2000年まで使わねぇよ」と思っていたのです。(本当)だから年は2桁で十分だったのです。これら一連の考え方を根本的に直さないと、2000年問題の解決はできません。これから作るシステムは、すべて「年は4桁で表示・入力する」で統一しましょう。昔のデータを貯えるデータベースである以上、この先ずっとついてくる問題です。Accessのテーブルには「日付型」というデータ型がありますね。と時刻の情報を1つの領域にもつことができるデータ型です。昔のCOBOL等で作られたシステムではこのようなデータ型は無かったので、「980518」といった6桁の数字文字で日付を表していました。年2桁、月2桁、日2桁ですね。そもそもこういうデータの持ち方が現在の2000年問題を引き起こしているんですが、それはとりあえずおいといて(^_^;)Access(及びSQLベースのデータベースエンジン)の日付・時刻型とは、こういったものとは根本的に違います。内部では「シリアル値」と呼ばれる、一見すると数値にしか見えない値で扱われ、外に見せる時に日付のような表示形式で見せています。その表示形式は場合によって選ぶことができます。西暦表示だろうが和暦表示だろうが年4桁だろうが年2桁だろうが思いのままということです。日付表示形式は、なにも指定されない場合はWindowsのコントロールパネルの「地域」内での「日付」設定どおりに表示されます。長い形式、短い形式が指定されていますね?これを状況に応じて表示を変えたい場合は、Format関数、書式プロパティ等で設定します。あるクエリーでは西暦2桁表示がしたい、というのであればFormat関数で編集した結果を表示すればいいし、(書式プロパティでもいいです)あるフォームでは和暦を年号指定して入力、表示したいというのであれば書式プロパティと定型入力を組み合わせて使うことになります。(定型入力は、必ず和暦で入力してもらう等といった規則付けに有効です)日付・時刻型では日数の計算、月数の計算などの関数が豊富に用意されているので便利ですし、和暦・西暦変換のしくみをVBA、Accessに任せることができます。2000年ぐらいでびくびくする必要もありません。文の中で日付の演算が高速に出来たりというメリットもあります。?)を使うと処理が遅くなる心配がありますから。日付・時刻型フィールドにはありえない日付・時刻は入力できませんし、うるう年を含めた日付の論理チェックをプログラム上でやる必要もありません。日付・時刻型を使わないとどうなるでしょう。入力するか、月や日が1桁だった場合頭に0を加えるか・・・あー規則をきめるだけでもうイヤになってしまいますよね。その規則どおりにデータを入力してもらうようにチェックするのもまた大変ですし、かりに和暦を使用するとなると、西暦←→和暦の変換なんてことも考えなければなりません。(まぁこれは型変換関数で日付型へ変換すればいいのですが)と、いうわけでなぼは、テーブルに日付データを格納する際には日付・時刻型のご使用をお勧めいたします。デメリットはまったくない、って訳でもありません、注意する点はもちろんあります。日付・時刻型では、日付と同時に時刻まで管理できます。なにも考えず日付だけを入力した場合、時刻は午前0時が設定されています。定型入力等で制限を加えていない限り、時刻を入力しようと思えばできてしまうのです。データ入力中なんらかのミスで時刻が入ってしまった場合、画面上で書式を使って日付だけを表示させているとその事実に気づきません。テーブルのフィールドにある書式プロパティで日付を設定している場合、テーブルをデータシートで開いても入力されている時刻は見えません。コントロールパネルの設定も、通常は時刻が見えない設定になっています。比較結果はfalse(同じではない)になってしまいます。ところが見えているのは日付だけ、両方1998/09/01なのになぜ同じじゃないんだーっっといらんところで悩む羽目になりかねません。これを防ぐため、フォームなどで日付・時刻型の項目に入力させる場合には定型入力を使うか、時刻が入らないようデータ登録前にチェックする等したほうがいいでしょう。テーブルの書式プロパティでは年4桁から時刻まですべて表示するよう設定しておいたほうが、テーブルをデータシートで開けば正確なデータ内容をみることができるようになります。日付・時刻型を採用していたとしても、年の入力は4桁でしなければダメであることだけは忘れないでください。2000年パッチが入っているかどうかで違ってくるので注意が必要です。そんなわけで、なぼはいつも日付データの入力に関しては2桁で入れられようが4桁で入れられようが、入力直後(フォーカス喪失時とか)に必ず年4桁で再表示するようにしています。すれば、オペレータさんが間違った入力をする危険性を下げることができます。モジュール内で日付・時刻型を扱うとき、日付・時刻型の変数どうしでの比較はまるで問題ないですが、日付の入った文字列と比較したり文字列と結合したりするときには、絶対にFormat関数を使い年4桁を明示的に表示するように心がけましょう。ゆー問題もありますから。コンパネの設定なんかー信じてちゃいけません。「じゃあ、いまテキスト型や数値型で日付データ持ってるんだけど、日付型に変更したい!」場合どうしたらいいか。数値型に日付が入っている場合は、そのまま日付型への変更は難しいので、とりあえずテキスト型に変更しましょう。あった場合、長整数型にしてからテキスト型に変換したほうがいいかもしれません。テーブルをデザインビューで開き、データ型のコンボボックスをテキスト型に変更、デザインを保存すればOKです。インデックスが貼られている場合は、一度インデックスを消してからのほうがいいでしょう。すべての作業が終わってからもう一度インデックスを作成してください。デザインを保存したら、データシートビューで開いてみましょう。Accessが「日付と認識できる」形式できちんとデータが入っている場合、そのまま日付型に変換できる場合もあります。