次の方法で共有


JetAttachDatabase 関数

適用対象: Windows |Windows Server

JetAttachDatabase 関数

JetAttachDatabase 関数は、データベース インスタンスで使用するデータベース ファイルをアタッチします。 データベースを使用するには、その後 JetOpenDatabase を使用してデータベースを開く必要があります。

    JET_ERR JET_API JetAttachDatabase(
      __in          JET_SESID sesid,
      __in          const tchar* szFilename,
      __in          JET_GRBIT grbit
    );

パラメーター

sesid

API 呼び出しに使用するデータベース セッション コンテキスト。

szFilename

アタッチするデータベースの名前。

grbit

次のオプションの 0 個以上を指定するビットのグループ。

説明

JET_bitDbDeleteCorruptIndexes

JET_paramEnableIndexCheckingが設定されている場合、Unicode データに対するすべてのインデックスが削除されます。 詳細については、「解説」を参照してください。

JET_bitDbDeleteUnicodeIndexes

Unicode データに対するすべてのインデックスは、 JET_paramEnableIndexCheckingの設定に関係なく削除されます。 詳細については、「解説」を参照してください。

JET_bitDbUpgrade

互換性のために残されています。 使用しないでください。

JET_bitDbReadOnly

データベースの変更を防止します。

戻り値

この関数は、次のいずれかの戻りコードを 使用して、JET_ERR データ型を返します。 考えられる ESE エラーの詳細については、「 拡張ストレージ エンジン エラーエラー処理パラメーター」を参照してください。

リターン コード

説明

JET_errSuccess

操作は正常に完了しました。

JET_errBackupInProgress

バックアップ中にデータベースをアタッチすることはできません。

JET_errDatabaseFileReadOnly

szFilename で指定されたデータベース ファイルは書き込み可能である必要があります。 Read-Only属性を設定しないでください。また、実行中のプロセスには、ファイルに書き込むのに十分な特権が必要です。

JET_errDatabaseInUse

データベース ファイルは、別のプロセスによって既に開かれています。

JET_errDatabaseInvalidPath

szFilename に無効なパスが指定されました。 szFilename は NULL 以外で、有効なパスを参照する必要があります。

JET_errDatabaseSharingViolation

データベース ファイルは、別のセッションによって既にアタッチされています。

JET_errFileAccessDenied

データベース エンジンは、データベース ファイルを開くことができません。 ファイルが別のプロセスによって使用されているか、呼び出し元がファイルを開くために十分な特権を持っていない可能性があります。

JET_errFileNotFound

szFilename に指定されたファイルが存在しません。

JET_errPrimaryIndexCorrupted

プライマリ インデックスでエラーが発生しました。 これは、物理的な破損 (ディスクやメモリの破損など) が原因である可能性があります。 また、古いオペレーティング システムで最後に変更されたデータベースをアタッチし、プライマリ インデックスが Unicode データを含む列を超えている場合にも返されることがあります。 Unicode データに対するインデックスの詳細については、解説を参照してください。

JET_errSecondaryIndexCorrupted

セカンダリ インデックスでエラーが発生しました。 これは、物理的な破損 (ディスクやメモリの破損など) が原因である可能性があります。 また、古いオペレーティング システムで最後に変更されたデータベースをアタッチし、セカンダリ インデックスが Unicode データを含む列を超えている場合にも返されることがあります。 Unicode データに対するインデックスの詳細については、解説を参照してください。 esentutl -d コマンドを使用してオフライン ユーティリティを使用してデータベースを最適化すると、セカンダリ インデックスが完全に再構築されます。

JET_errTooManyAttachedDatabases

インスタンスごとにアタッチできるデータベースは有限数のみです。 制限は現在、インスタンスあたり 7 つのデータベースです。

JET_wrnDatabaseAttached

データベース ファイルがこのセッションによって既にアタッチされていることを示す致命的でない警告。

解説

JetAttachDatabase の呼び出しは、JetAttachDatabase2 を呼び出し、値 0 を渡すことと同じです。つまり、cpgDatabaseSizeMax パラメーターに制限はありません。

書き込み可能なデータベースをアタッチすると (つまり、 grbit パラメーターでJET_bitDbReadOnlyが指定されていない場合)、オペレーティング システム レベルでのみファイルが開きます。 他のプロセスではファイルを開くことができません。 複数のプロセスで 1 つのデータベースを読み取り専用モードで開くことで、1 つのデータベースをアタッチできます。

データベース ファイルは、 JetDetachDatabase または JetDetachDatabase2 を使用してデタッチされます。

インデックス チェック パラメーター

Windows の異なるバージョンでは、さまざまな方法で Unicode テキストが正規化されます。 つまり、1 つのバージョンの Windows でビルドされたインデックスは、他のバージョンでは機能しない可能性があります。

Windows Server 2003 より前では、オペレーティング システムのバージョンが変更されたとき (Service Pack のインストールを含む)、Unicode データに対するすべてのインデックスが破損している可能性がありました。

Windows Server 2003 以降で作成されたインデックスには、作成された Unicode 正規化のバージョンでフラグが設定されます。 古いインデックスにはバージョン情報が含まれない。 Unicode 正規化のほとんどの変更は、新しい文字を追加することで構成され、以前は未定義だったコード ポイントが定義され、異なる方法で正規化されるようになりました。 したがって、バイナリ データが Unicode 列に格納されている場合、新しいコード ポイントが定義されると、異なる方法で正規化されます。

Windows Server 2003 の時点で、ESE データベース エンジンは、未定義のコード ポイントを含む Unicode インデックス エントリを追跡します。 これらは、定義された Unicode 文字のセットが変更されたときにインデックスを修正するために使用できます。

これらのパラメーターは、ESE データベース エンジンが、オペレーティング システムの別のビルドで最後に使用されたデータベースにアタッチした場合の動作を制御します。 オペレーティング システムのバージョンは、データベース ヘッダーにスタンプされます。

JET_paramEnableIndexCheckingTRUE に設定されていて、データベースに破損している可能性があるインデックスが含まれている場合:

  • grbit に JET_bitDbDeleteCorruptIndexesが含まれている場合、JetAttachDatabase は破損している可能性のあるインデックスを削除します

  • grbit にJET_bitDbDeleteCorruptIndexesが含まれていない場合、削除が必要なインデックスがある場合、JetAttachDatabaseはエラーを返します。

JET_paramEnableIndexCheckingFALSE に設定されている場合:

  • JetAttachDatabase は、破損している可能性のあるインデックスを無視し、JET_errSuccessを返します (他のエラーがなかった場合)。

Windows Server 2003 以降: JET_paramEnableIndexChecking がリセットされていない場合は、内部修正テーブルを使用してインデックス エントリを修正します。 これにより、すべてのインデックスの破損が修正されるわけではありませんが、アプリケーションに対して透過的になります。

データベースが読み取り専用としてアタッチされている場合、インデックスを固定または削除することはできません。 この場合、API は代わりに、JET_errSecondaryIndexCorruptedやJET_errPrimaryIndexCorruptedなどのエラーを返します。

要件

要件

Client

Windows Vista、Windows XP、または Windows 2000 Professional が必要です。

[サーバー]

Windows Server 2008、Windows Server 2003、または Windows 2000 Server が必要です。

Header

Esent.h で宣言されています。

Library

ESENT.lib を使用します。

[DLL]

ESENT.dllが必要です。

Unicode

JetAddColumnW (Unicode) および JetAddColumnA (ANSI) として実装されます。

参照

拡張可能なストレージ エンジン ファイル
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JetAttachDatabase2
JetCreateDatabase
JetDetachDatabase
JetDetachDatabase2
JetOpenDatabase
JetSetSystemParameter