采用断开的recordset对表中的几条记录进行更新时,如果多个用户同时操作,后执行的用户就会提示“无法为更新定位行,记录集已被更改”,而如果不用updatebatch采用update的话就没有问题,但一次只能更改一条记录,不能整个提交
有没有什么好的方法?
QueryRS.CursorLocation = adUseClient
QueryRS.Open "Select * From Query Where lngQueryID=" & QueryID, g_SysConnection, adOpenDynamic, adLockBatchOptimistic
Set QueryRS.ActiveConnection = Nothing...长时间的操作Set QueryRS.ActiveConnection = g_SysConnection
QueryRS.UpdateBatch
QueryRS.Close
有没有什么好的方法?
QueryRS.CursorLocation = adUseClient
QueryRS.Open "Select * From Query Where lngQueryID=" & QueryID, g_SysConnection, adOpenDynamic, adLockBatchOptimistic
Set QueryRS.ActiveConnection = Nothing...长时间的操作Set QueryRS.ActiveConnection = g_SysConnection
QueryRS.UpdateBatch
QueryRS.Close
你的代码有点问题, CursorLocation 属性设置为 adUseClient 时只支持 adUseStatic 的游标类型,“如果设置了不支持的值,不会导致错误,将使用最接近支持的 CursorType。”建议用客户端游标+静态游标 或 服务器端游标+健集。引号中的话,是从“ADO程序员参考手册”上抄的,我没有研究,也不太理解其确切含意。
QueryRS.Open "Select * From Query Where lngQueryID=" & QueryID, g_SysConnection, adOpenDynamic, adLockBatchOptimistic
用adOpenKeyset和adOpenStatic都试过了,一样的错误
但在不用updatebatch而使用update的情况下却没有问题但我整个记录集是断开的,好像不能用update
1.按主键
2.按所有列更改
3.按指定列更改
4.按TimeStamp更改例: rs.Properties("Update Criteria")=adCriteriaKey '按主键更新批处理更新会形成5种冲突情况:
1.修改已经被修改的field;
2.修改field,其所在的行中包含另一个已被修改过的field;
3.修改已经被删除的行;
4.删除已经被修改过的行;
5.删除已经被删除的行。你需要照单点药,使用update criteria属性解决冲突。
QueryRS.Open "Select * From Query Where lngQueryID=" & QueryID, g_SysConnection, adOpenStatic, adLockBatchOptimistic, adCmdText
QueryRS.Properties("Update Criteria")=adCriteriaKey
果然搞定了
多谢 fionfrankie(玻色)
想问一下在Properties中还有什么其他的属性吗,在帮助中怎么找不到啊?
冲突管理动态属性除adCriteriaKey外还有:
1.adCriterialAllCols
2.adCriteriaUpdCols(默认)
3.adCriteriaTimeStamp