更新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无意保留更改,以便它可以让我在本地更改数据。
答
我认为@ HK1的建议是一个很好的建议,不过我不确定你的能力是否改变记录集中的任何值,无论你试图更新的列是否被计算。自从我使用经典的ADO以来,这已经很长时间了,但是如果记录集断开连接,它可能只会在此时被读取。
但是,如果您对使用记录集执行更新没有兴趣,并且您需要本地更改值,那么您可能应该首先考虑将结果存储在本地数组中?这样,您可以最小化记录集的锁定和游标选项,并立即关闭记录集并释放这些资源。现在
rs.Open cmd, conn, adOpenForwardOnly, adLockReadOnly
Dim MyArray
MyArray = rs.GetRows()
rs.Close: set rs = nothing
你可以操纵不过你想要的......
我所期望的一个错误,因为taxid是不是一个真正的列。输出为'taxid = c.name + c.SSN'时出现同样的错误。就我个人而言,我不会在VB6中使用记录集来将更新持久化回数据库,而是使用存储过程并将参数化调用发送到该存储过程。当然,该过程需要写入,以允许输入可更新列。我不知道是否有办法让ADO服从底层定义。 – 2012-04-23 19:43:50
thx @Aaron但我没有坚持更新回数据库。我只是试图改变记录集中的值以满足本地需求。有没有办法配置记录集,以便ADO不会“担心”永远不会发生的持久性问题? – sisdog 2012-04-23 20:09:04
你试过断开记录集吗?设置rst.ActiveConnection = Nothing。 – HK1 2012-04-24 00:34:49