Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access “处理”;不是有效的书签。”;记录损坏时出错_Ms Access_Vba - Fatal编程技术网

Ms access “处理”;不是有效的书签。”;记录损坏时出错

Ms access “处理”;不是有效的书签。”;记录损坏时出错,ms-access,vba,Ms Access,Vba,我有一个数据库有一些损坏的记录。在Access中查看表格时,记录在字段中显示“#Error”。同时会弹出一个对话框,其中显示“不是有效的书签”。在某些VBA代码中处理这些记录时,我得到了相同的错误(错误号为3159)。我的问题是:如何在VBA中检测这些损坏的记录?我可以在不捕获特定错误的情况下执行此操作吗?有没有办法使用SQL删除这些记录?我试过“压缩并修复”,但它没有碰到它们。也许: Sub CheckForErr(tname) Dim rs As DAO.Recordset Dim db A

我有一个数据库有一些损坏的记录。在Access中查看表格时,记录在字段中显示“#Error”。同时会弹出一个对话框,其中显示“不是有效的书签”。在某些VBA代码中处理这些记录时,我得到了相同的错误(错误号为3159)。我的问题是:如何在VBA中检测这些损坏的记录?我可以在不捕获特定错误的情况下执行此操作吗?有没有办法使用SQL删除这些记录?我试过“压缩并修复”,但它没有碰到它们。

也许:

Sub CheckForErr(tname)
Dim rs As DAO.Recordset
Dim db As Database

Set db = CurrentDb

If Left(tname, 4) <> "Msys" Then

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 If

End Sub
Sub-CheckForErr(tname)
Dim rs作为DAO.Recordset
dimdb作为数据库
Set db=CurrentDb
如果左(tname,4)“Msys”,则
Set rs=db.OpenRecordset(tname)
用rs
做而不做
对于rs字段中的每个fld
如果IsError(rs(fld.Name))则
调试。打印“错误”
如果结束
下一个
.下一步
环
以
rs.Close
设置rs=无
如果结束
端接头

我尝试使用VBA删除有问题的记录,但没有成功。代码删除记录后,这些记录仍然保留。我可以通过手动删除一条记录,然后使用“压缩和修复”来解决这个问题。我想这是我必须为客户做的。谢谢大家。

对于损坏的数据库,IMO,最好的解决方案是创建一个新的空数据库,并从损坏的数据库导入所有对象。

我也遇到了同样的问题

解决方案:

1-选择“压缩并修复”:这将按空行更改有问题的“#错误”行


2-删除空行。(它们通常位于表的末尾,因为它们是空的。)

不好,
iError
没有检测到错误。我也尝试了
isNull
,但没有成功。谢谢@Remou。