【问题标题】:Edit an ADO recordset without altering the database编辑 ADO 记录集而不更改数据库
【发布时间】:2019-11-08 04:25:19
【问题描述】:

我正在尝试将一些数据添加到记录集,然后再将其内容粘贴到工作表中。我想处理与数据库断开连接的记录集,因此只更改导入的数据本身。

我使用了this thread的方法,但不幸的是我最终得到了错误:

多步操作产生错误。检查每个状态值。

简而言之,我有一个空字段的查询,我在将 rs 粘贴到 ws 之前填充了该字段。

请注意,我遗漏了很多代码。声明所有变量。

Public Function getdata(query As String) As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim connstring As String
Set cnn = New ADODB.Connection

connstring = "omitted"
cnn.Open connstring

Set getdata = New ADODB.Recordset
    getdata.CursorLocation = adUseClient
getdata.Open query, connstring, adOpenStatic, adLockBatchOptimistic

cnn.Close
End Function

'----------------------------------

Sub Start()
'Code
Dim rs As ADODB.RecordSet

Set rs = getdata("Select Code, '' From (values" & RegularCode & "," & RegularCodeBase & ") As AT(Code) Except Select Code, '' From astAssetTypes")

rs.Fields(1).Value = "TestValue" 'Error on this line

'Code
End Sub

或者,我可以使用记录集填充一个数组并编辑该数组,但我觉得这是我不需要采取的步骤

【问题讨论】:

    标签: sql-server excel vba adodb


    【解决方案1】:

    您可以在进行编辑之前断开 ADO 记录集。但是,根据记录集是否实际可更新,您仍然可能会遇到错误。

    要断开记录集,只需删除连接:

    Set rs.ActiveConnection = Nothing
    

    这将阻止它将任何更改发送回服务器。

    断开连接的记录集在可写内容方面仍然依赖于数据库。他们可以重新连接,然后应该能够将更改提交回数据库。

    如果您想调整数据库端不可写的内容,我建议将记录集移动到数组中。您可以使用GetRows method 来有效地移动数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多