我最近遇到了vba update语句并且我一直在使用Recordset.Edit
and Recordset.Update
不仅编辑我现有的数据,而且更新它。
我想知道两者的区别:recordset.update
and Update sql Vba
陈述。我认为它们都做同样的事情,但我不知道哪一个更有效以及为什么。
示例代码如下:
'this is with sql update statement
dim someVar as string, anotherVar as String, cn As New ADODB.Connection
someVar = "someVar"
anotherVar = "anotherVar"
sqlS = "Update tableOfRec set columna = " &_
someVar & ", colunmb = " & anotherVar &_
" where columnc = 20";
cn.Execute stSQL
这是用于记录集(更新和编辑):
dim thisVar as String, someOthVar as String, rs as recordset
thisVar = "thisVar"
someOthVar = "someOtherVar"
set rs = currentDb.openRecordset("select columna, columnb where columnc = 20")
do While not rs.EOF
rs.Edit
rs!columna = thisVar
rs!columnb = someOthvar
rs.update
rs.MoveNext
loop
假设WHERE columnc = 20
选择 1000 多行,正如您在评论中提到的那样,执行该操作UPDATE
语句应该比循环遍历记录集并一次更新其行要快得多。
后一种策略是 RBAR(Row By Agonizing Row)方法。第一个策略,执行单个(有效)UPDATE
,是一种“基于集合”的方法。一般来说,基于集合的性能优于 RBAR。
然而,你的两个例子提出了其他问题。我的第一个建议是使用 DAO 而不是 ADO 来执行您的UPDATE
:
CurrentDb.Execute stSQL, dbFailonError
无论您选择哪种策略,请确保columnc已编入索引。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)