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