Шаг 16 - Метод RepairDatabase

Описание
Делает попытку восстановить поврежденную базу данных Microsoft Jet (только для баз данных Microsoft Jet).

DBEngine.RepairDatabase имяБД

Параметры
имяБД
Аргумент имяБД задается с помощью выражения типа String, содержащего путь и имя файла существующей базы данных Microsoft Jet. Если не указать путь, то поиск файла будет проведен только в текущем каталоге. В системах, поддерживающих общее соглашение об именах (UNC, uniform naming convention), можно также указать сетевой путь, например: "\\server1\share1\dir1\db1.mdb".

Замечания
Перед восстановлением базы данных, указанной в аргументе имяБД, ее необходимо закрыть. В сети ни один из пользователей не может держать открытой базу данных во время проведения операции восстановления. Если база данных имяБД не закрыта или недоступна для монопольного доступа, возникает ошибка.
Данный метод позволяет восстановить базу данных, которая была помечена как возможно поврежденная в результате незавершенной операции записи. Это может произойти в случае внезапного выхода из приложения, использующего ядро Microsoft Jet, в результате перерыва в питании или сбоев компьютера. База данных не будет помечена как возможно поврежденная, если она была закрыта с помощью метода Close или если был осуществлен штатный выход из приложения.
В методе RepairDatabase также делается попытка восстановить все системные таблицы и все индексы. Любые данные, которые не удастся восстановить, будут потеряны. Если восстановление базы данных невозможно, возникает ошибка выполнения.
Ошибка выполнения обычно возникает при попытке открыть или сжать поврежденную базу данных. Однако в некоторых случаях повреждение базы данных может остаться не обнаруженным и ошибка не возникнет. Рекомендуется предоставлять пользователям приложения возможность выполнить метод RepairDatabase в случае неожиданного и непредсказуемого поведения базы данных.
Базы данных некоторых типов могут оказаться поврежденными, если пользователь закрывает приложение, не закрыв предварительно объекты Database или Recordset и ядро Microsoft Jet. В этом случае Microsoft Windows не успевает записать на диск данные, помещенные во временные буферы. Для того чтобы предотвратить повреждения базы данных, рекомендуется разработать процедуру выхода из приложения и программы отключения, обеспечивающие сохранение всех буферизованных страниц в базе данных. При возможных сбоях питания рекомендуется иметь автономные аварийные источники питания.
После восстановления базы данных рекомендуется также сжать ее с помощью метода CompactDatabase для дефрагментации файла и освобождения пространства на диске.

Пример
В следующей программе делается попытка восстановить базу данных Борей.mdb. Данную процедуру нельзя запускать из модуля в базе данных Борей.mdb.

Sub RepairDatabaseX()

	Dim errLoop As Error

	If MsgBox("Восстановить базу данных 'Борей'?",vbYesNo) = vbYes Then
		On Error GoTo Err_Repair
		DBEngine.RepairDatabase "Борей.mdb"
		On Error GoTo 0
		MsgBox "Процедура восстановления завершена!"
	End If

	Exit Sub

Err_Repair:

	For Each errLoop In DBEngine.Errors
		MsgBox "Неудачная попытка восстановления!" & vbCr & "Код ошибки: " & errLoop.Number & vbCr & errLoop.Description
Next errLoop
End Sub

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.