编辑ADODB记录集中的记录

时间:2014-08-29 10:37:32

标签: vba adodb recordset

我要做的是通过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

1 个答案:

答案 0 :(得分:1)

您的SQL没有按照您的想法行事: SELECT ... NULL OUTCOME ...将在名为OUTCOME的字段中返回值NULL,但不会链接到名为OUTCOME的表中的字段(我认为您正在查找),因为您当前的语法设置ALIAS没有选择该字段。我假设桌子上存在OUTCOME字段。如果不是,您需要预先创建它或者在您可以向其写入任何内容之前执行alter table来添加字段。 我建议事先创建字段(我认为你已经完成了)。但请确保默认值为NULL,因此您不需要在select中执行NULL技巧,并确保允许该字段采用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

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