我需要在导入的表中删除/替换一些麻烦的字符。以下是我目前的做法;适用于<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));"
有什么建议或指示?
谢谢!
执行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 "*['""]*"
但是,由于你要用自身的重复替换一个角色('
和''
),你需要注意不要在数据集上多次运行上面的内容。
您可以轻松地测试以找出哪种方法更好,但我猜测使用查询会更快。
这就是说在Excel中做 - 它会比你眨眼快20k行咀嚼。您可以使用一点VBA导入/导出工作表。
使用REPLACE和SEARCH函数,例如=IF(SEARCH(CHAR(23),A1)>0, REPLACE(A1,SEARCH(CHAR(23),A1),1," "), A1)