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

问题描述 投票:0回答:2

我需要在导入的表中删除/替换一些麻烦的字符。以下是我目前的做法;适用于<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));"

有什么建议或指示?

谢谢!

ms-access access-vba
2个回答
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 "*['""]*"

但是,由于你要用自身的重复替换一个角色('''),你需要注意不要在数据集上多次运行上面的内容。


0
投票

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

这就是说在Excel中做 - 它会比你眨眼快20k行咀嚼。您可以使用一点VBA导入/导出工作表。

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

© www.soinside.com 2019 - 2024. All rights reserved.