采用断开的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

解决方案 »

  1.   

    只能对键集或静态游标使用批更新。
    你的代码有点问题, CursorLocation 属性设置为 adUseClient 时只支持 adUseStatic 的游标类型,“如果设置了不支持的值,不会导致错误,将使用最接近支持的 CursorType。”建议用客户端游标+静态游标 或 服务器端游标+健集。引号中的话,是从“ADO程序员参考手册”上抄的,我没有研究,也不太理解其确切含意。
      

  2.   

    http://community.csdn.net/Expert/topic/3213/3213960.xml?temp=.227276
      

  3.   

    上面的语句中的第三个参数
    QueryRS.Open "Select * From Query Where lngQueryID=" & QueryID, g_SysConnection, adOpenDynamic, adLockBatchOptimistic
    用adOpenKeyset和adOpenStatic都试过了,一样的错误
    但在不用updatebatch而使用update的情况下却没有问题但我整个记录集是断开的,好像不能用update
      

  4.   

    記錄集斷開與否應該都可以用 Update 啊﹐我試過了!!!
      

  5.   

    我原先是对多条记录更新后,最后执行updatebatch的,update好像每次只能更新一条记录
      

  6.   

    解决冲突ado提供几种update criteria条件:
    1.按主键
    2.按所有列更改
    3.按指定列更改
    4.按TimeStamp更改例:   rs.Properties("Update Criteria")=adCriteriaKey '按主键更新批处理更新会形成5种冲突情况:
    1.修改已经被修改的field;
    2.修改field,其所在的行中包含另一个已被修改过的field;
    3.修改已经被删除的行;
    4.删除已经被修改过的行;
    5.删除已经被删除的行。你需要照单点药,使用update criteria属性解决冲突。
      

  7.   

    楼主CursorLocation选了客户端,但却用了动态键集,动态键集只支持rs.CursorLocation = adUseServer , 所以楼主代码应该等于QueryRS.CursorLocation = adUseClient
    QueryRS.Open "Select * From Query Where lngQueryID=" & QueryID, g_SysConnection,  adOpenStatic, adLockBatchOptimistic, adCmdText
      

  8.   

    加上一句
    QueryRS.Properties("Update Criteria")=adCriteriaKey
    果然搞定了
    多谢 fionfrankie(玻色)
    想问一下在Properties中还有什么其他的属性吗,在帮助中怎么找不到啊?
      

  9.   

    一般文档没有说明,我翻烂了几本书才知道的,后来在msdn专刊中也见到过。
    冲突管理动态属性除adCriteriaKey外还有:
    1.adCriterialAllCols
    2.adCriteriaUpdCols(默认)
    3.adCriteriaTimeStamp