JetAttachDatabase возвращает -1213

Я пытаюсь прочитать некоторые существующие и размонтированные файлы базы данных ESE. Я довольно успешно играл с одним файлом.dat. Но когда я пытаюсь открыть существующую базу данных с PageSize, равным 32768, я получаю ошибку.

Вот мой код (без обработки ошибок):

FError := JetSetSystemParameter(&FInstance, nil, JET_paramRecovery, FPagesize, "off");
FError := JetCreateInstance(&FInstance, 'myinstance');
FError := JetInit(&FInstance);
FError := JetBeginSession(FInstance, &FSessionId, nil, nil);
FError := JetAttachDatabase(FSessionId, FFilename, JET_bitDbReadOnly);

Сбой при вызове JetAttachDatabase, который возвращает код -1213. Я делаю что-то неправильно?

Я использую Windows 7 32bit.

2 ответа

Решение

Движок Esent по умолчанию использует определенный размер страницы. Если я не ошибаюсь, это 4K. Вы должны будете сообщить движку, что база данных, которую вы хотите открыть, имеет другой размер страницы. Используйте что-то вроде этого:

FError := JetSetSystemParameter(&FInstance, nil, JET_paramDatabasePageSize, 32768, nil);

Если вы все время открываете разные базы данных, вы можете захотеть, чтобы ваше приложение проверяло и устанавливало размер страницы автоматически.

Я пытаюсь сделать именно это, но если я пытаюсь установить размер страницы (в данном случае 8192), я получаю ошибку -1030 (экземпляр уже инициализирован) независимо от того, был ли он инициализирован или нет.

Попытка открыть без установки размера страницы приводит к ошибке -1213 (размер страницы не совпадает)

Согласно esentutl, файл, который я пытаюсь прочитать, был создан в версии 6.2, тогда как dll, которую я использую - 6.1

Это имеет значение?

Другие вопросы по тегам