Итак, база данных может быть повреждена. Вы увидите это, если будете открывать ее в Access. Возьмите файл, который прилагается к этому шагу и попробуйте открыть его в Access. Вы увидите вот такую надпись:
В Access есть возможность восстановить файл. Вот здесь:
Вы в своей программе можете предусмотреть такую же возможность. Вот пример когда по нажатию на кнопку в диалоговом окне производится процедура восстановления:
void CTestRepDlg::OnButton1() { CDaoWorkspace cd; cd.RepairDatabase("c:/error.mdb"); }
Функция такая:
static void PASCAL RepairDatabase( LPCTSTR lpszName ); throw( CDaoException, CMemoryException );
В lpszName содержится имя восстанавливаемой базы данных.
Сразу скажу, что не все восстанавливается. Я тут около 30 минут портил базу данных для того, чтобы ее можно было восстановить. То есть испортить не на совсем. Вот получилось. Что я сделал ??? Открыл ее в бинарном редакторе и стер название MSysModules2. Вот она и испортилась. Но самое обидное, что если Вы удалите часть файла, то уже не поможет ничего. Удалите кусок из середины или конец и уже все. А это и случается при отключении питания например. Так что восстановление не очень хорошее. Вообще это восстановление подразумевает другое. Я тут вычитал такую фразу. Если Ваша база данных ведет себя непонятным образом, то надо запустить восстановление.
Кстати как открыть базу данных в бинарном редакторе если его нет ??? Просто VC умеет. File->Open->error.mdb. И он откроет как бинарный файл. Вы можете явно это указать при открытии.
И еще испортить можно так, что DAO совершит некорректную операцию. А это просто свинство. Я тут как испортил ?! Запустил Access, чтобы он восстановил, а он вылетел сославшись на DAO. Как это понимать ??? Microsoft try поленилась поставить ??? Или эта ошибка не дала исключения, а просто выбила код.
Кстати по поводу успешного восстановления, как оптимистически пишет Access. То что файл откроется не говорит о том, что там будет Таблица или Ваши данные. Вот и верь им потом.