我需要删除/替换导入表中的一些麻烦字符。以下是我目前的做法; <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));"
有什么建议或建议吗?
谢谢!
答案 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)