Можно ли программно обнаружить поврежденные таблицы базы данных Access 2007? - PullRequest
2 голосов
/ 29 октября 2008

Можно ли с помощью кода программно (из .NET, например, с помощью запроса SQL) запросить базу данных Access, если она повреждена или в ней есть таблицы с поврежденными строками?

// * Andy * 1003

Ответы [ 3 ]

2 голосов
/ 29 октября 2008

Ни один из объектов уровня приложения / базы данных не имеет такого свойства isCorrupted.

Кроме того, поврежденные базы данных не имеют стандартного поведения. В зависимости от ситуации база данных может вообще не открываться (файл не распознается как действительный файл MDB). Если он открывается, ошибка может возникнуть немедленно или при использовании / открытии определенного объекта (таблицы, формы или кода VBA).

В этих условиях я не думаю, что есть положительный ответ на ваш вопрос.

Примечание. В дополнение к стандартному параметру сжатия / восстановления в Access может помочь экспорт объектов в другие базы данных (или импорт их из поврежденной базы данных), а также недокументированная команда .saveAsText.

0 голосов
/ 15 апреля 2009

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

В частности, памятные поля были хорошим признаком повреждения, поскольку они не хранятся в виде строки, как остальные данные, а хранятся в отдельной таблице. Я мог бы открыть поврежденную таблицу в режиме таблицы данных и попытаться определить, какие строки были повреждены, поместив фокус на поврежденную ячейку напоминания - если бы была ошибка, я бы сразу получил ошибку.

Поврежденные столбцы Int и Date будут иметь нечетные значения (3/18/1890, -11100910 и т. Д.), Но на самом деле не будут выдавать никаких ошибок при чтении их значений.

Именно поэтому циклическое переключение всех записей и полей в базе данных, как показано в VBA из предыдущего ответа, имеет некоторый смысл, но будет работать наиболее надежно только при наличии повреждения мемо-полей.

0 голосов
/ 29 октября 2008

Вот некоторые VBA, которые можно использовать для проверки на наличие ошибок в предыдущих выпусках Access. Может также подойти и к 2007 году.

Sub CheckForErr(tablename)
Dim rs As dao.Recordset
Dim db As Database

Set db = CurrentDb

Set rs = db.OpenRecordset(tname)

With rs
   Do While Not .EOF
        For Each fld In rs.Fields
            If IsError(rs(fld.Name)) Then
               Debug.Print "Error"
            End If
        Next
        .MoveNext
    Loop
End With

rs.Close
Set rs = Nothing

End Sub
...