【问题标题】:Recordset.Edit or Update sql vba statement fastest way to update?Recordset.Edit 或Update sql vba 语句最快的更新方法是什么?
【发布时间】:2015-09-02 20:00:37
【问题描述】:

我最近遇到了 vba 更新语句,我一直在使用 Recordset.EditRecordset.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

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

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+

标签: sql vba ms-access


【解决方案1】:

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

后一种策略是 RBAR(Row By Agonizing Row)方法。第一个策略,执行单个(有效)UPDATE,是一种“基于集合”的方法。一般来说,基于集合的性能优于 RBAR。

但是,您的 2 个示例引发了其他问题。我的第一个建议是使用 DAO 而不是 ADO 来执行您的UPDATE

CurrentDb.Execute stSQL, dbFailonError

无论您选择哪种策略,请确保 columnc 已编入索引。

【讨论】:

  • 如果只选择1行或几行,Recordset的更新速度会更快,对吧?
【解决方案2】:

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

然而,VBA 方法具有明显的优势,即代码更简洁,并且可以在更新/编辑之前或之后使用记录集,而无需请求数据。如果您必须在更新之间进行冗长的计算,这可能会产生巨大的影响。此外,记录集可以通过 ByRef 传递给支持功能或进一步处理。

【讨论】:

    【解决方案3】:
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("select invoice_num from dbo_doc_flow_data where barcode = '" & Me.barcode_f & "'")
    Do While Not rs.EOF
                rs.Edit
                rs!invoice_num = Me!invoice_num_f
                rs.Update
                rs.MoveNext
    Loop
                rs.Close
    

    【讨论】:

    • 这没有回答问题。你想问一个问题吗?然后请这样做并提出一个新问题。但请先阅读How to Ask
    【解决方案4】:

    我发现当我需要按顺序更新表中的每条记录时,例如在使用自动编号时添加顺序 ID 是不可行的,添加运行总计,或者任何基于某些值的增量计算记录集,DAO 方法要快得多。

    如果您的数据没有按照您需要的顺序进行处理,而您需要依赖与数据源匹配的值,那么 SQL 的效率会高得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2022-02-04
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多