更新ADO记录集计算字段

更新ADO记录集计算字段

问题描述:

我使用下面的SQL针对一个SQLServer后端ADO记录集在VB6:更新ADO记录集计算字段

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

当我试图记录中更新本地一排taxid场ADO抱怨错误“多步骤操作产生的错误,检查每个状态值。”我认为这是困扰于taxid字段来自计算字段而不是原始表列的事实。为了我的目的,我永远不会将这些更改持久化回数据库,所以我正在寻找一种方法来告诉ADO无意保留更改,以便它可以让我在本地更改数据。

+0

我所期望的一个错误,因为taxid是不是一个真正的列。输出为'taxid = c.name + c.SSN'时出现同样的错误。就我个人而言,我不会在VB6中使用记录集来将更新持久化回数据库,而是使用存储过程并将参数化调用发送到该存储过程。当然,该过程需要写入,以允许输入可更新列。我不知道是否有办法让ADO服从底层定义。 – 2012-04-23 19:43:50

+0

thx @Aaron但我没有坚持更新回数据库。我只是试图改变记录集中的值以满足本地需求。有没有办法配置记录集,以便ADO不会“担心”永远不会发生的持久性问题? – sisdog 2012-04-23 20:09:04

+2

你试过断开记录集吗?设置rst.ActiveConnection = Nothing。 – HK1 2012-04-24 00:34:49

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

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

rs.Open cmd, conn, adOpenForwardOnly, adLockReadOnly 

Dim MyArray 
MyArray = rs.GetRows() 

rs.Close: set rs = nothing 

你可以操纵不过你想要的......

+0

这是错误地downvoted,然后我接到一个电话。现在,除非您进行编辑,否则不会让我撤消它。 – Bob77 2012-04-24 08:00:37

+0

Downvote恢复! – Bob77 2012-04-24 17:44:18

+0

糟糕,完成了。在冲浪时,我需要在这里下车! – Bob77 2012-04-24 17:51:03