更新计算字段的ADO记录集

时间:2012-04-23 19:40:21

标签: sql-server vb6 ado recordset

我在VB6中使用以下sql作为针对SQLServer后端的ADO记录集:

select c.name, taxid=
   case when exists(select 1 from sometable where fld='abc') 
   then c.SSN else null end

当我尝试更新记录集中的一行中的taxid字段时,ADO会抱怨错误“多步操作生成错误。请检查每个状态值”。我认为由于出租车字段来自计算字段而不是原始表列而受到打扰。出于我的目的,我永远不会将这些更改持久化回数据库,因此我正在寻找一种方法来告诉ADO无意保留更改,以便它允许我在本地更改数据。

1 个答案:

答案 0 :(得分:1)

我认为@ HK1的建议很好,但我不确定你能否改变记录集中的任何值,无论你要更新的列是否被计算。自从我使用经典ADO以来已经很长时间了,但如果记录集断开连接,它可能会在那时只读。

但是如果你没有兴趣使用记录集来执行更新,并且你需要在本地更改值,那么你应该考虑先将结果存储在本地数组中吗?这样,您可以最小化记录集的锁定和游标选项,例如,立即关闭记录集并释放这些资源。

rs.Open cmd, conn, adOpenForwardOnly, adLockReadOnly

Dim MyArray
MyArray = rs.GetRows()

rs.Close: set rs = nothing

现在你可以随心所欲地操纵MyArray ......