Как читать записи из базы данных ESE с помощью cpp
Я успешно открыл базу данных ESE с помощью JetOpenDatabase API. Чтобы прочитать записи, я открыл таблицу "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, но я не получил фактический результат.
Кто-нибудь знает, как читать записи из существующих и размонтированных файлов базы данных ESE с помощью cpp?
2 ответа
Да, Фотис дает хороший совет. Конкретные коды ошибок очень ценны. Поскольку вы ищете пример кода, часть более полного примера кода написана на C#.
Взгляните на EsentInteropTests на https://managedesent.codeplex.com/SourceControl/latest. Ищите RetrieveColumn, и он даст вам хорошее представление о том, какие заказы вызывать, в какой заказ. Конечно, это не правильный язык, но вы можете легко перевести.
Я предполагаю, что вы используете MSysObjects в качестве примера, потому что каждая база данных имеет эту таблицу. Это для внутреннего использования, и может быть довольно загадочным для расшифровки.
-Мартин
Движок esent дает подсказку о том, что пошло не так по коду ошибки. Посмотрите здесь: https://msdn.microsoft.com/en-us/library/gg269297(v=exchg.10).aspx
В общем, вам нужно подготовить JET_RETRIEVECOLUMN, прежде чем вы действительно попытаетесь прочитать данные через JetRetrieveColumn (s), выбрав, какие столбцы вы хотите получить, подготовив буфер / указатели и т. Д. Конечно, это еще не все, но вы должны немного конкретнее с вашим вопросом.