Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 更新计算字段的ADO记录集_Sql Server_Vb6_Ado_Recordset - Fatal编程技术网

Sql server 更新计算字段的ADO记录集

Sql server 更新计算字段的ADO记录集,sql-server,vb6,ado,recordset,Sql Server,Vb6,Ado,Recordset,我在VB6中对SQLServer后端使用以下sql作为ADO记录集: select c.name, taxid= case when exists(select 1 from sometable where fld='abc') then c.SSN else null end 当我试图在本地更新记录集中某一行中的taxid字段时,ADO会抱怨错误“多步操作生成错误。检查每个状态值”。我认为taxid字段来自计算字段而不是原始表列这一事实让我感到困扰。出于我的目的,我永远不会将这

我在VB6中对SQLServer后端使用以下sql作为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

现在,您可以随意操作
MyArray

我预计会出现错误,因为taxid不是真正的列。输出为
taxid=c.name+c.SSN
时出现相同错误。就个人而言,我不会使用VB6中的记录集将更新持久化回数据库,而是使用存储过程并向该存储过程发送参数化调用。当然,这个过程需要编写成只允许输入可更新的列。我不知道是否有办法使ADO遵守底层的definition.thx@Aaron,但我不会将更新持久化回数据库。我只是尝试根据本地需要更改记录集中的值。是否有办法配置记录集,使ADO不会“担心”永远不会发生的持久性问题?是否尝试断开记录集的连接?Set rst.ActiveConnection=Nothing。这被错误地否决了,然后我接到了一个电话。现在,在您进行编辑之前,请不要让我撤消它。哦,完成了。我需要在这里冲浪时关掉该死的电话!我只是开玩笑。:-)不管怎样,我今天已经成功了。干杯