リリース版の OLE DB 1.5 は、のカテゴリは "対応#" です。以下に、2000 年問題について説明します。
OLE DB を 2000 年問題に完全に対応させるためには、次の修正プログラムが必要です。
Microsoft Data Access Component (MDAC) 2.0 Service Pack 1。このプログラムは、Windows NT4 Service Pack 4 で提供されます。(Service Pack 4の入手形態によってはMDAC 2.0 SP1が含まれていない場合があります。MDAC 2.0 SP1が含まれているのは、SP4のルートディレクトリにMDACディレクトリがある場合です。 Windows NT 4.0 Service Pack 4 の入手につきましては、ここをクリックしてください。)
Microsoft Data Access Component (MDAC) 2.1
詳細については、メモ 2 を参照してください。
日付の処理
日付/時刻情報を保存する OLE DB のデータ型には、DBTYPE_DATE、DBTYPE_DBTIME、DBTYPE_DBTIMESTAMP、DBTYPE_DBDATE、および DBTYPE_FILETIME があります。
DBTYPE_DBTIME では、日付情報は保存されません。ほかの 4 つのデータ型では日付情報が保存され、4 桁の西暦に変換できます。問題となるのは、文字列の変換です。
DBTYPE_DBTIMESTAMP、DBTYPE_DBDATE、および DBTYPE_DBTIMESTAMP の文字列変換は ISO に基づいています。ただし、下 2 桁の西暦など、OLE オートメーションの日付形式も使用できます。
下 2 桁の西暦の処理
OLE DB では、OLEAUT の標準ソリューションが使用されます。その場合、00 ~ 29 年は 20XX 年、30 ~ 99 年は 19XX と解釈されます。
日付に関する注意事項
データを保存したり、MDAC データ アクセス API のメソッドやプロパティを呼び出す場合は、4 桁の西暦を使用してください。下 2 桁の西暦を使用すると、データ ソースのプロバイダの変換ロジックが使用されます。その場合、(任意のバックエンド データ ストアでは) 変換の基準が異なる場合があります。
ガイドラインと推奨事項
OLE とほとんどのバックエンド データ ストアには、"変換ロジック" の問題があります。そのため、データをストアに保存したり、そのストアを問い合わせる場合は、日付に 4 桁の西暦を使用してください。
認識されている問題
次は、OLE DB Data Coercion Library で認識されている 2000 年問題です。
ADO のコーディングで、
作成した ADO レコードセットに Date データ型 (たとえば、adDate、adDBDate、adFileTime、adDBTimeStamp など) が含まれている場合
そして、日付の区切り記号としてスラッシュではなく、ピリオドを使った日付形式 (たとえば、01/01/98 ではなく 01.01.98) を使用している場合
さらに、60 年より前の西暦を指定している場合
データ コンバート (msdadc.dll) では、日付が時刻として解釈されます。たとえば、01.01.01 (2001 年 1 月 1 日) は 01:01:01 (1899 年 12 月 30 日 1:01:01am) に変換されます。
または
OLE DB に直接コーディングすると、同じ問題が起こります。
バリアント型 (BSTR、VARIANT、またはPROPVARIANT) から date データ型である
DBTYPE_DATE
DBTYPE_DBDATE
DBTYPE_DBTIME
DBTYPE_FILETIME
DBTYPE_DBTIMESTAMP
などに変換し、日付の区切り記号としてスラッシュではなく、ピリオドを使った日付形式 (たとえば、01/01/98 ではなく 01.01.98) を使用している場合
そして、60 年より前の西暦を指定している場合
データ コンバート (msdadc.dll) では、日付が時刻として解釈されます。たとえば、01.01.01 (2001 年 1 月 1 日) は 01:01:01 (1899 年 12 月 30 日 1:01:01am) に変換されます。
メモ 1
OLE DB に直接コーディングし、バリアント型の BSTR を DBDATE に変換した場合、0001 年 01 月 01 日が 2001 年 01 月 01 日に変換される場合があります。この問題は、0001 ~ 0099 年の場合だけに起こります。そのため、対応期間は 0100 年以降だと考えるべきです。
メモ 2
2000 年問題に "対応" している OLE DB と "対応#" している OLE DB とを区別するには、次のようにバージョンを確認します。