Cod*_*ast 9 sql ms-access vba access-vba ms-access-2003
我最近遇到了vba更新语句,我一直在使用Recordset.Edit并且Recordset.Update不仅要编辑现有数据,还要更新它.
我想知道两者之间的区别:recordset.update和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
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)
假设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编入索引.
对于批量更新,SQL方法通常是最快的,但语法通常很笨拙.
但是,VBA方法具有明显的优点,即代码更清晰,并且可以在更新/编辑之前或之后使用记录集而无需重新获取数据.如果您必须在更新之间进行冗长的计算,这可能会产生巨大的差异.此外,记录集可以通过ByRef传递给支持功能或进一步处理.
| 归档时间: |
|
| 查看次数: |
27134 次 |
| 最近记录: |