MSAccess-删除麻烦字符的更有效方法?

时间:2019-03-04 17:30:32

标签: ms-access access-vba

我需要删除/替换导入表中的一些麻烦字符。以下是我目前的做法; <5K记录集很好,但是在大于20K记录的较大集上却很慢。

我想有比遍历每条记录并执行替换更好的方法:

    Set rs = db.OpenRecordset("TblMatch")
    Do While Not rs.EOF
        strDesc = Replace(Nz(rs!DESC), Chr(39), Chr(39) & Chr(39))
        strDesc = Replace(Nz(rs!DESC), Chr(34), "")
        strDesc = Replace(Nz(rs!Validated_DESC), Chr(39), Chr(39) & Chr(39))
        strDesc = Replace(Nz(rs!Validated_DESC), Chr(34), "")
        rs.MoveNext
    Loop

以下内容会更有效吗?

    db.Execute "UPDATE TblMatch SET TblMatch.Desc = Replace([Desc],Chr(39),Chr(39) & Chr(39));"

有什么建议或建议吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

执行SQL语句几乎总是比使用VBA遍历和修改Recordset中单个记录的内容更快。

这样,您可以使用以下SQL update语句执行代码的操作:

update 
    tblmatch t
set 
    t.desc = replace(replace(t.desc, "'", "''"), """", ""), 
    t.validated_desc = replace(replace(t.validated_desc, "'", "''"), """", "")
where 
    t.desc like "*['""]*" or t.validated_desc like "*['""]*"

但是,由于您要用重复的字符替换字符('''),因此需要注意不要在数据集上多次运行以上字符。

答案 1 :(得分:0)

尽管我猜使用查询会更快,但是您可以轻松测试以找出哪种方法更好。

那就是在Excel中执行的操作-它咀嚼20k行的速度比您眨眼的速度快。您可以使用一些VBA导入/导出工作表。

使用REPLACE和SEARCH功能,例如=IF(SEARCH(CHAR(23),A1)>0, REPLACE(A1,SEARCH(CHAR(23),A1),1," "), A1)