【问题标题】:Edit records in ADODB recordset编辑 ADODB 记录集中的记录
【发布时间】:2014-10-23 08:47:43
【问题描述】:

我要做的是通过 SQL 查询从在线服务器获取一些数据,然后循环通过记录集修改记录。

尝试修改记录集时出现错误:

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

我的问题是:有没有办法修改我从查询中获得的记录集中的记录?

在这种情况下,如果字段 1 满足特定条件,我将修改字段 2。 (在这种情况下,字段 2 是一个字符串)

这里是简化的代码:

Dim adoConn As ADODB.Connection
Dim locRS As New ADODB.Recordset, proRS As ADODB.Recordset
Dim strConnection As String

Set getSQL = New ADODB.Recordset


'Set Objects
Set adoConn = New ADODB.Connection

'Specify connection string
strConnection = "User ID=xxx; Password=xxx;Data Source=xxx;Provider=OraOLEDB.Oracle"

'Open the connection
adoConn.Open (strConnection)

'Set up recordset properties
getSQL.CursorType = adOpenStatic
getSQL.CursorLocation = adUseClient
getSQL.LockType = adLockBatchOptimistic

'Import the data
getSQL.Open "SELECT FIELD1, FIELD2 FROM TABLE", adoConn, adOpenStatic, adLockOptimistic
Set getSQL.ActiveConnection = Nothing
getSql.Update


'Loop through data
getSQL.MoveFirst
Do While Not stockRS.EOF
'If cetrain condition is met then modify the null column
if getSQL!FIELD1=CRITERIA then
'Error here
getSQL!FIELD2="SOME STRING"
End If
getSQL.MoveNext
Loop

'Close
adoConn.Close
Set adoConn = Nothing

【问题讨论】:

    标签: vba adodb recordset


    【解决方案1】:

    您的 SQL 没有按照您的想法执行: SELECT ... NULL OUTCOME ... 将在名为 OUTCOME 的字段中返回值 NULL 但不会链接到表中名为 OUTCOME 的字段(我认为您正在寻找),因为您当前的语法正在设置起一个别名不选择该字段。我假设表上存在 OUTCOME 字段。如果不是,您需要预先创建它或执行更改表以添加字段,然后才能向其写入任何内容。 我建议预先创建字段(我认为您已经完成了)。但请确保默认值为 NULL,因此您不需要在 select 中执行 NULL 技巧 ALSO 确保允许该字段采用 NULL 值,否则您将看到错误。选择变成:

    getSQL.Open "SELECT FIELD1, FIELD2, OUTCOME FROM TABLE", adoConn, adOpenStatic, adLockOptimistic
    

    然后在函数中管理NULL值如下:

    if getSQL!FIELD1=CRITERIA then
    'Error here
        getSQL!OUTCOME="SOME STRING"
    ELSE
        getSQL!OUTCOME=NULL
    End If
    

    这可确保您始终向 OUTCOME 字段写入内容,以便处理和 OUTCOME 不会不同步。

    另外我仍然认为您已经将记录集数据与服务器分离:

    Set getSQL.ActiveConnection = Nothing
    

    完成后执行此操作以释放资源。 您可能还需要一个

    getSql.Update
    

    进行更改后将它们提交回数据库。

    【讨论】:

    • 还是没有。甚至尝试深度复制记录集 (link)。但还是一无所获。不是字段属性吗?
    • 如果仍然无法正常工作,您能否发布包含我所有建议的最新版本代码,以便我再看一看。
    • 感谢您的帮助,非常感谢!但是,它仍然给出相同的错误。为了澄清一点,我想编辑一个特定的记录,我最初放置的空列是为了修改该数据,但如果我想修改说“Field2”,同样的原则也适用。问题是即使离婚后也不允许更新,我不知道如何允许更新!
    • 你能发布表格架构吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多