1

アプリでESE(JetBlue)を使用していますが、JetAttachDatabaseが呼び出されると、JET_errDatabaseDirtyShutdownが返されます。私は自分のアプリで何をすべきですか?私の望みは、満たされていない取引を削除することです

4

2 に答える 2

2

ログの回復は、JetInitの呼び出しによって自動的に実行されます。これにより、コミットされていないトランザクションが自動的にロールバックされます。JetInitが機能するためには、ログファイルを見つける必要があるため、この場合、おそらく次のいずれかがあります。

  1. ログファイルを削除しました。そうしないでください。
  2. ログファイルのパスが正しく設定されていません。ESEがログを見つけられるように、初期化するときは常に同じログファイルパスを設定してください。
  3. データベースを移動しました。ログにはデータベースへのハードコードされたパスが含まれているため、データベースを移動するとリカバリが中断されます。これに対処するために、代替リカバリパスシステムパラメータをデータベースを含むディレクトリに設定できます。
于 2010-03-03T06:36:11.243 に答える
1

JetCreateInstance()の後およびJetInit()の前に以下を追加することにより、「ダーティシャットダウン」のクリアを自動的に試行するようにアプリケーションを構成できます。はい、これらの順序は重要です。

Api.JetSetSystemParameter(instance, JET_SESID.Nil, Server2003Param.AlternateDatabaseRecoveryPath, 0, Path.GetDirectoryName(databasePath));

(上記のサンプルはC#ですが、要点はわかります...)

最後のパラメータは、修復されたデータベースを表示する場所であるため、ダーティデータベースファイルと同じディレクトリである可能性があります。

于 2016-11-20T16:56:47.820 に答える