2015-02-11 71 views
1

我已通过使用JetOpenDatabase API成功打开ESE数据库。 要读取记录,我打开“MSysObjects”表并将当前索引设置为“RootObjects”。如何使用cpp从ESE数据库读取记录

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

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数据库文件读取记录?

回答

1

esent引擎为您提供错误代码出错的提示。你看它这里: https://msdn.microsoft.com/en-us/library/gg269297(v=exchg.10).aspx

一般来说,你必须准备JET_RETRIEVECOLUMN之前,你实际上是试图通过JetRetrieveColumn(S)读取数据,通过你想要检索的列选择,准备缓冲/指针,等等。当然,还有更多,但你应该对你的问题更具体些。

+0

嗨Fotis Mouratidis,可以请你给我一个例子来检索现有ESE数据库中的数据? – sam 2015-02-12 10:21:25

1

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

看看EsentInteropTests在https://managedesent.codeplex.com/SourceControl/latest。搜索RetrieveColumn,它会给你一个好主意,以哪个订单来调用顺序。当然,这不是正确的语言,但你可以很容易地翻译。

我推测你使用MSysObjects作为例子,因为每个数据库都有该表。它用于内部使用,并且可以相当模糊地解密。

-Martin

+0

我现在可以读取integer类型的列,但我仍然无法读取具有字符串值的列。我收到错误JET_errColumnNotFound。我确信我所给予的专栏是正确的。请让我知道如何从表中读取字符串值。这是代码 – sam 2015-02-16 07:29:52

+0

'JET_COLUMNID columnid = 12; wchar_t buffer [2048] = {0}; ERR = :: JetRetrieveColumn(会话ID, TABLEID, ColumnID的, 和缓冲, 的sizeof(缓冲区), NULL, 0, NULL);' – sam 2015-02-16 07:36:50

+0

如果收到错误消息,你应该相信它,并期待了columnId再次。在调用JetRetrieveColumn之前,您应该调用JetGetColumnInfo来获取正确的ColumnId。 – 2015-02-17 12:26:10

相关问题