在ADODB记录编辑记录(Edit records in ADODB recordset)

2019-10-20 19:34发布

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

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

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

我的问题有没有修改从一个记录,我从一个查询得到的记录的方式吗?

在这种情况下,我修改字段2如果字段1满足特定标准。 (在这种情况下字段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

Answer 1:

您的SQL是不是做你认为:SELECT ...空结果......是要在一个叫做观察场返回NULL值,但在表中调用结果不会链接到现场(这是我想你找)作为当前的语法是建立不选择该领域的别名。 我假设表中存在的场观察。 如果没有,你需要创建它前面或做一个ALTER TABLE增加前场,你可以写任何东西给它。 我建议创建场达阵(我想你已经做了)。 但要确保这样你就不会需要做的NULL绝招在选择还要确保该领域被允许携带一个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

这确保你总是写些东西来观察字段,以便处理和结果没有得到同步的。

此外,我还以为你已经离婚了从服务器时记录的数据:

Set getSQL.ActiveConnection = Nothing

做到这一点你在完成后释放资源。 您可能还需要一

getSql.Update

更改后,把它们提交回数据库。



文章来源: Edit records in ADODB recordset