1

既存のマウントされていないesentデータベースファイル(Windows.edbなど)を読み込もうとしています。私はいくつかのedbファイルをかなりうまくいじっています。しかし、8192と等しくないPageSizeでデータベースを開こうとすると、エラーが発生します。

これが私のコードです(エラー処理なし):
FError:= JetSetSystemParameter(@FInstance、nil、JET_paramDatabasePageSize、FPagesize、nil);
FError:= JetCreateInstance(@FInstance、'EDBInstance');
FError:= JetInit(@FInstance);
FError:= JetBeginSession(FInstance、@FSessionId、nil、nil);
FError:= JetAttachDatabase(FSessionId、FFilename、JET_bitDbReadOnly);

FPageSize = 8192である限り、正常に機能します。他の値(4096、32768)は、-1213コードを返すJetInit呼び出しで失敗します。データベースに適切なPageSize値を設定しないと、JetAttachDatabaseで同じエラーが発生します。これは理解できます。しかし、JetInitによって返される最初のエラーは理解できません。私は何を間違えますか?Laurion Burchallがこれを読んでいることを願っています!:-)

私はWindows764ビットを実行しています。

4

1 に答える 1

3

2つの可能性があります:

  1. 開こうとしているデータベースのページサイズは8Kbです。ESENTUTL / Mデータベースを使用して、ページサイズを確認します。
  2. ページサイズは、JetInit呼び出しによって作成されたログファイルに常に保持されます。実行の間にこれらのファイルをクリアしないと、異なるページサイズでJetInitを呼び出すときに-1213エラーが発生します。

既存のデータベースを読み取り専用の方法で開きたい場合は、リカバリをオフにする必要があります(JET_paramRecoveryを「off」に設定します)。これにより、ログファイルが生成されなくなり、多くの問題が回避されます。

于 2011-02-15T00:05:46.133 に答える