1

我已经使用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 数据库文件中读取记录吗?

4

2 回答 2

1

是的,Fotis 给出了很好的建议。具体的错误代码非常有价值。由于您正在寻找示例代码,因此一些更全面的示例代码是用 C# 编写的。

查看https://managedesent.codeplex.com/SourceControl/latest上的 EsentInteropTests 。搜索 RetrieveColumn,它可以让您很好地了解以哪种顺序调用哪些订单。当然,这不是正确的语言,但您可以轻松翻译。

我假设您使用 MSysObjects 作为示例,因为每个数据库都有该表。它是供内部使用的,并且可能相当难以破译。

-马丁

于 2015-02-12T18:38:57.670 回答
1

esent 引擎通过错误代码提示您出了什么问题。在这里查找: https ://msdn.microsoft.com/en-us/library/gg269297(v=exchg.10).aspx

一般来说,您必须在实际尝试通过JetRetrieveColumn(s)读取数据之前准备 JET_RETRIEVECOLUMN ,方法是选择要检索的列、准备缓冲区/指针等。当然还有更多,但你应该你的问题更具体一点。

于 2015-02-12T09:04:33.103 回答