我已使用 JetOpenDatabase API成功打开ESE数据库。 要读取记录,我打开了“MSysObjects”表,并将当前索引设置为“RootObjects”。
这是我的代码(没有错误处理):
err = ::JetOpenTable(sessionID,dbID,"MSysObjects",NULL,0,0,&tableId);
err = ::JetSetCurrentIndex( sessionID, tableId, "RootObjects" );
err = ::JetMove( sessionID, tableId, JET_MoveFirst, 0 );
读取记录我尝试使用 JetRetrieveColumns 函数从当前记录中检索多个列值。我也尝试了 JetRetrievedColumn 功能,但我没有得到实际结果。
是否有人知道如何使用cpp从现有和未安装的ESE数据库文件中读取记录?
答案 0 :(得分:1)
esent引擎为您提供错误代码出错的提示。在这里查找: https://msdn.microsoft.com/en-us/library/gg269297(v=exchg.10).aspx
通常,在实际尝试通过 JetRetrieveColumn 读取数据之前,必须准备JET_RETRIEVECOLUMN,方法是选择要检索的列,准备缓冲区/指针等。当然还有更多内容,但你应该对你的问题更具体一点。
答案 1 :(得分:1)
是的,Fotis给出了很好的建议。具体的错误代码非常有价值。由于您正在寻找示例代码,因此一些更全面的示例代码是用C#编写的。
在https://managedesent.codeplex.com/SourceControl/latest查看EsentInteropTests。搜索RetrieveColumn,它会让您知道哪个订单要按哪个顺序调用。当然,它不是正确的语言,但你可以轻松翻译。
我假设您使用MSysObjects作为示例,因为每个数据库都有该表。它是供内部使用的,破译起来可能相当神秘。
-Martin