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 正在阅读这篇文章!:-)

我正在运行 Windows 7 64 位。

4

1 回答 1

3

有两种可能:

  1. 您尝试打开的数据库的页面大小为 8Kb。使用 ESENTUTL /M数据库查看页面大小。
  2. 页面大小始终保存在由 JetInit 调用创建的日志文件中。如果您在运行之间不清除这些文件,那么在使用不同的页面大小调用 JetInit 时会出现 -1213 错误。

如果您想以只读方式打开现有数据库,则应关闭恢复(将 JET_paramRecovery 设置为“关闭”)。这将防止生成任何日志文件,从而避免很多问题。

于 2011-02-15T00:05:46.133 回答