如果我更改PageSize,JetInit将返回-1213

时间:2011-02-08 11:37:52

标签: esent edb

我正在尝试阅读一些现有的和未安装的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)在JetInit调用时失败,返回-1213代码。如果我没有为数据库设置正确的PageSize值,我在JetAttachDatabase上会得到相同的错误,我可以理解。但JetInit返回的第一个错误我无法理解。 我做错了什么?我希望Laurion Burchall正在读这篇文章! : - )

我正在运行Windows 7 64位。

1 个答案:

答案 0 :(得分:2)

有两种可能性:

  1. 您尝试打开的数据库的页面大小为8Kb。使用ESENTUTL / M 数据库查看页面大小。
  2. 页面大小始终保留在由JetInit调用创建的日志文件中。如果您没有在运行之间清除这些文件,那么在使用不同页面大小调用JetInit时会出现-1213错误。
  3. 如果要以只读方式打开现有数据库,则应关闭恢复(将JET_paramRecovery设置为“off”)。这将阻止生成任何日志文件,这将避免很多问题。