JetInit возвращает -1213, если я изменю размер страницы - PullRequest
1 голос
/ 08 февраля 2011

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

Вот мой код (без обработки ошибок):
FError: = JetSetSystemParameter (@FInstance, nil, JET_paramDatabasePageSize, FPagesize, nil);
FError: = JetCreateInstance (@FInstance,'EDBInstance');
FError: = JetInit (@FInstance);
FError: = JetBeginSession (FInstance, @FSessionId, nil, nil);
FError: = JetAttachDatabase (FSessionId, FFilename, JET_OdDB)

Работает нормально, пока FPageSize = 8192. Любое другое значение (4096, 32768) не выполняется при вызове JetInit, который возвращает код -1213.Если я не установил правильное значение PageSize для базы данных, я получаю ту же ошибку в JetAttachDatabase, которую я могу понять.Но первую ошибку, которую возвращает JetInit, я не могу понять. Что я делаю не так? Надеюсь, Лорион Бурчалл читает это!: -)

Я использую 64-разрядную версию Windows 7.

1 Ответ

2 голосов
/ 15 февраля 2011

Есть две возможности:

  1. База данных, которую вы пытаетесь открыть, имеет размер страницы 8 КБ. Используйте ESENTUTL / M database , чтобы увидеть размер страницы.
  2. Размер страницы всегда сохраняется в лог-файлах, которые создаются вызовом JetInit. Если вы не удалите эти файлы между запусками, вы получите ошибку -1213 при вызове JetInit с другим размером страницы.

Если вы хотите открыть существующую базу данных только для чтения, вам следует отключить восстановление (установите для JET_paramRecovery значение «off»). Это предотвратит создание любых лог-файлов, что позволит избежать многих проблем.

...