我正在尝试阅读一些现有和未安装的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位。
答案 0 :(得分:2)
默认情况下,Esent引擎使用特定的页面大小。如果我没弄错的话就是4K。您必须告诉引擎您要打开的数据库具有不同的页面大小。使用类似的东西:
FError := JetSetSystemParameter(&FInstance, nil, JET_paramDatabasePageSize, 32768, nil);
如果您一直打开不同的数据库,您可能希望让应用程序签出并自动设置页面大小。
答案 1 :(得分:0)
我正在尝试这样做,但是如果我尝试设置页面大小(在这种情况下为8192),我得到-1030错误(实例已经初始化),无论它是否已经初始化。< / p>
尝试在不设置页面大小的情况下打开会出现-1213错误(页面大小不匹配)
根据esentutl,我正在尝试阅读的文件是在6.2版本中创建的,而我正在使用的dll是6.1
这会有所作为吗?