是否可以通过代码以编程方式(例如从.NET通过SQL查询)向Access数据库询问它是否已损坏或者表中是否包含损坏的行?
//安迪
答案 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所示)有一定意义,但只有在备忘录字段损坏时才能最可靠地执行。