Recordset.Edit还是更新sql vba语句最快的更新方式?

Cod*_*ast 9 sql ms-access vba access-vba ms-access-2003

我最近遇到了vba更新语句,我一直在使用Recordset.Edit并且Recordset.Update不仅要编辑现有数据,还要更新它.

我想知道两者之间的区别:recordset.updateUpdate 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
Run Code Online (Sandbox Code Playgroud)

这是用于记录集(更新和编辑):

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 
Run Code Online (Sandbox Code Playgroud)

Han*_*sUp 7

假设WHERE columnc = 20选择了1000多行,正如您在注释中提到的那样,执行该UPDATE语句应该明显快于循环记录集并一次更新一行.

后一种策略是RBAR(Row By Agonizing Row)方法.执行单个(有效)的第一个策略UPDATE是"基于集合"的方法.通常,基于集合在性能方面胜过RBAR.

但是你的两个例子提出了其他问题.我的第一个建议是使用DAO而不是ADO来执行你的UPDATE:

CurrentDb.Execute stSQL, dbFailonError
Run Code Online (Sandbox Code Playgroud)

无论您选择哪种策略,都要确保将columnc编入索引.


Gus*_*tav 6

对于批量更新,SQL方法通常是最快的,但语法通常很笨拙.

但是,VBA方法具有明显的优点,即代码更清晰,并且可以在更新/编辑之前或之后使用记录集而无需重新获取数据.如果您必须在更新之间进行冗长的计算,这可能会产生巨大的差异.此外,记录集可以通过ByRef传递给支持功能或进一步处理.