【问题标题】:recordset close when updatesql?更新sql时记录集关闭?
【发布时间】:2021-03-13 08:57:10
【问题描述】:

我有一个 Excel VBA 来更新 Access 中的数据。我使用下面的脚本。 我只是有一个小问题。如果我用 rs.close 关闭记录集,我会收到消息“对象关闭时不允许操作”。如果我不使用 rs.close ,那么它可以完美运行。

  • 使用 sql 时真的需要 rs.close 吗?

  • 我也试过用cn.execute updatesql。如何设置记录锁定属性?

       Public Sub Upload_to_DB()
          Call setparameters
           ' exports data from the worksheet to a table in an Access database
          Dim cn As ADODB.Connection ws As Worksheet , updatesql As String, r_fld As Long, r_val As Long, c As Long, str As String, rs As ADODB.Recordset
    
    
    
    
          Set cn = CreateObject("ADODB.Connection")
          cn.mode = 16 + 3
          cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _
          "Data Source= " & Path & filename & ";"
          cn.CursorLocation = adUseClient
    
          Set rs = CreateObject("ADODB.Recordset")
          Set ws = Sheets("Opportunity_down_and_upload")
    
    
        With ws  
      r_fld = 13     
      r_val = 14     
      c = 3
    
      str = Empty
    
      str = .Cells(r_fld, c).Offset(0, -1).Value & " = " & .Cells(r_val, c).Offset(0, -1).Value
    
      continue = True
           Do
          str = str & " , " & .Cells(r_fld, c).Value & " = " & .Cells(r_val, c).Value
          c = c + 1
                  If IsEmpty(.Cells(r_fld, c)) Then continue = False
          Loop Until continue = False
               End With
    
     'This part is important:'
    
      updatesql = "UPDATE tbl_D_opp_prod_offer SET "
      updatesql = updatesql & str
      updatesql = updatesql & " WHERE [Opp_ID] =  " & ws.Range("A10") & ";"
    
      rs.Open updatesql, cn, , adLockOptimistic, adCmdText
      cn.Close
    
      Set rs = Nothing
      Set cn = Nothing
    
      End Sub
    

【问题讨论】:

    标签: vba ms-access-2010 adodb


    【解决方案1】:
    • 使用 sql 时真的需要 rs.close 吗?

      不。事实上,rs.close 根本不需要。当对象超出范围时,VBA 将自动删除对象,这意味着如果它们是在子目录中定义的,它们会在结束时被删除。对于 ADODB,旧版本中存在一些错误导致其不可靠,这意味着旧代码通常包含 rs.closeconnection.close 而它们并不是真正必要的

    • 我也试过用cn.execute updatesql。如何设置记录锁定属性?

      你不能。它并不真正适用于操作查询。记录锁定选项定义了在开始编辑、更新记录时是否应该锁定记录,或者因为它是只读的而根本不能锁定,并且由于您使用的是更新查询,因此没有时间介于两者之间

    【讨论】:

    • 感谢您的回答,我不会真的担心 rs.close。
    猜你喜欢
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多