SQL="update guanxi set 关系='有效' ,最终关系=0  where 用户表号=1200522 AND 用户户号=0 and 用户编号=1  and 最终关系=1"GUANXI表的各字段属性是 :关系:字符   最终关系:数字   用户表号:数字   用户户号:数字  用户编号:数字  执行此CONN.EXECUTE SQL,出现的错误提示是:
“不能更新0个字段是因为类型转换失败,不能更新0个记录是因为键值冲突,不能更新1个记录是因为锁定冲突,不能更新0个记录是因为有效性规则冲突。
是否继续执行这个类型的操作查询?
如要忽略错误并且执行查询,请单击是。”之前有几个查询代码是:
    sql = "select  *  from guanxi  where  用户编号=" & sBianHao & " and 关系='失效'  and 最终关系=1"
    Rst.Close
    Rst.Open sql, Conn, adOpenStatic, adLockReadOnly不知道最后一个参数adLockReadOnly是不是对这个执行语句有影响。请大家帮忙分析一下是什么原因。谢谢大家。 

解决方案 »

  1.   

    Rst.Open sql, Conn, adOpenStatic, adLockReadOnly不知道最后一个参数adLockReadOnly是不是对这个执行语句有影响。
    ***************************
    应该不是这个原因
    ****************************
    1、   AdOpenForwardOnly   (默认值)一次只能向前移动一行。   
      2、   AdOpenKeyset   打开键集类型游标。   
      3、   AdOpenDynamic   打开动态类型游标   
      4、   AdOpenStatic   打开静态类型游标。   
      AdOpenForwardOnly和AdOpenStatic这两种游标使得记录集只读,它表示创建数据的一个快照。后者比前者灵活,因为它可以允许任意方向移动。   
      AdOpenKeyset允许任意移动,并且允许更改记录集。其他用户对记录集的添加和删除,这个游标反映不出来。但它能反映出其他用户对记录集的更改。   
      AdOpenDynamic允许所有操作,其他用户对记录集的添加、删除、更改在此记录集中 都是可见的。   
      1、  AdLockReadOnly   (默认值)只读   ---   不能改变数据。   
      2、  AdLockPessimistic   悲观锁(逐个)---   为确保成功完成编辑记录所需的工作,   
      在编辑时立即锁定数据源的记录。   
      3、  AdLockOptimistic   乐观锁(逐个)---   只在调用Update   方法时才锁定记录。   
      4、 AdLockBatchOptimistic   乐观批更新---用于批更新模式(与立即更新模式相对)。 
      

  2.   

    参考学习这个:
    http://download.csdn.net/source/1644211
      

  3.   

    有影响. adLockReadOnly 只读。无法更改数据 
    要执行update 语句,不如直接Conn.execute("your sql")
      

  4.   

    不同的数据库对 ADO 的参数的处理不一样,特别是用服务端游标时,数据库自己会在认为需要的地方进行加锁。
    只读的数据可以试试用无连接方式。
    Set rst = New ADODB.Record
    rst.CursorLocation = adUseClient
    rst.Open sql, Conn, adOpenStatic, adLockReadOnly
    Set rst.ActiveConnection = Nothing
      

  5.   

    SQL="update guanxi set 关系='有效' ,最终关系=0 where 用户表号=1200522 AND 用户户号=0 and 用户编号=1 and 最终关系=1"
    conn.execute sql
      

  6.   

    请问我这个查询:
     sql = "select * from guanxi where 用户编号=" & sBianHao & " and 关系='失效' and 最终关系=1"
      Rst.Close
      Rst.Open sql, Conn, adOpenStatic, adLockReadOnly
    读取到的正好是我要进行UPDATE的数据,如何才能保证这个UPDATE语句的正常执行呢。
      

  7.   

    sql = "select * from guanxi where 用户编号=" & sBianHao & " and 关系='失效' and 最终关系=1"
    Rst.Close
    Rst.Open sql, Conn, adOpenStatic, adLockOptimistic, adCmdText
    试试这个。
      

  8.   

    就是最后一句Set rst.ActiveConnection = Nothing
    将 RecordSet 和 Connection 分离开来,这个记录集就成了一个单纯的数据对象,和数据库不再发生任何关系,也就不会影响后面的更新了。又:rst 变量(包括其他的对象)用完后就 Set Nothing,用之前重新 New,可以避免前后多次操作之间内部成员的差异,这是编程原则。
      

  9.   


    执行UPDATE和Conn.execute("your sql")  不都会受到adLockReadOnly的影响吗?
      

  10.   

    看来这个是你同学,一样的问题:
    http://topic.csdn.net/u/20110223/08/31e5b230-4361-4ceb-913c-5b4a817e5c58.html
      

  11.   

    直接用execute方法就没是说没有用你那个rst.open啊...查询才用open方法比较方便