JetAttachDatabase返回-1213

时间:2015-02-10 06:27:59

标签: esent extensible-storage-engine

我正在尝试阅读一些现有和未安装的ESE数据库文件。我一直在使用一个.dat文件而非常成功。但是当我尝试使用等于32768的PageSize打开现有数据库时,我收到错误。

这是我的代码(没有错误处理):

FError := JetSetSystemParameter(&FInstance, nil, JET_paramRecovery, FPagesize, "off");
FError := JetCreateInstance(&FInstance, 'myinstance');
FError := JetInit(&FInstance);
FError := JetBeginSession(FInstance, &FSessionId, nil, nil);
FError := JetAttachDatabase(FSessionId, FFilename, JET_bitDbReadOnly);

JetAttachDatabase 调用失败,返回-1213代码。我做错了吗?

我正在运行Windows 7 32位。

2 个答案:

答案 0 :(得分:2)

默认情况下,Esent引擎使用特定的页面大小。如果我没弄错的话就是4K。您必须告诉引擎您要打开的数据库具有不同的页面大小。使用类似的东西:

FError := JetSetSystemParameter(&FInstance, nil, JET_paramDatabasePageSize, 32768, nil);

如果您一直打开不同的数据库,您可能希望让应用程序签出并自动设置页面大小。

答案 1 :(得分:0)

我正在尝试这样做,但是如果我尝试设置页面大小(在这种情况下为8192),我得到-1030错误(实例已经初始化),无论它是否已经初始化。< / p>

尝试在不设置页面大小的情况下打开会出现-1213错误(页面大小不匹配)

根据esentutl,我正在尝试阅读的文件是在6.2版本中创建的,而我正在使用的dll是6.1

这会有所作为吗?