是否可以以编程方式检测损坏的Access 2007数据库表?

时间:2008-10-28 21:14:39

标签: ms-access ms-access-2007

是否可以通过代码以编程方式(例如从.NET通过SQL查询)向Access数据库询问它是否已损坏或者表中是否包含损坏的行?

//安迪

3 个答案:

答案 0 :(得分:2)

没有应用程序/数据库级别对象具有此类“isCorrupted”属性。

此外,损坏的数据库没有标准行为。根据具体情况,数据库可能根本无法打开(文件未被识别为有效的mdb文件)。如果它打开,可能会立即发生错误或使用/打开特定对象(表,表单或VBA代码)时发生错误。

在这些情况下,我认为你的问题没有正面答案。

注意:除了Access的标准压缩/修复选项之外,将对象导出到其他数据库(或从损坏的数据库导入它们)以及未记录的.saveAsText命令可能会有很大的帮助。

答案 1 :(得分:0)

以下是一些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

答案 2 :(得分:0)

我们的共享驱动器上的访问数据库中存在导致损坏的网络问题,我花了很多时间清理几个特定表中的损坏行。

特别是备注字段是腐败的良好指示,因为它们不像其他数据那样存储在内联中,而是保存在单独的表中。我可以在数据表模式下打开损坏的表,并尝试通过将焦点放在损坏的备忘录单元格上来确定哪些行已损坏 - 如果存在损坏,那么我会立即收到错误。

损坏的Int和Date列会有奇数值(3/18/1890,-11100910等),但在读取它们的值时实际上不会抛出任何错误。

这就是为什么循环浏览数据库中的所有记录和字段(如前一个答案中的VBA所示)有一定意义,但只有在备忘录字段损坏时才能最可靠地执行。