当前位置:编程学习 > VB >>

送分100分:不能执行的SQL语句

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是不是对这个执行语句有影响。

请大家帮忙分析一下是什么原因。谢谢大家。

  主键 是怎么设的? 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   乐观批更新---用于批更新模式(与立即更新模式相对)。 
参考学习这个:
http://download.csdn.net/source/1644211
有影响. adLockReadOnly 只读。无法更改数据 
要执行update 语句,不如直接Conn.execute("your sql") 对记录我一般采用付值的使用方式,不采用绑定的方式 不同的数据库对 ADO 的参数的处理不一样,特别是用服务端游标时,数据库自己会在认为需要的地方进行加锁。
只读的数据可以试试用无连接方式。
Set rst = New ADODB.Record
rst.CursorLocation = adUseClient
rst.Open sql, Conn, adOpenStatic, adLockReadOnly
Set rst.ActiveConnection = Nothing
SQL="update guanxi set 关系='有效' ,最终关系=0 where 用户表号=1200522 AND 用户户号=0 and 用户编号=1 and 最终关系=1"
conn.execute sql
引用 6 楼 tiger_zhao 的回复:
不同的数据库对 ADO 的参数的处理不一样,特别是用服务端游标时,数据库自己会在认为需要的地方进行加锁。
只读的数据可以试试用无连接方式。

VB code
Set rst = New ADODB.Record
rst.CursorLocation = adUseClient
rst.Open sql, Conn, adOpenStatic, adLockReadOnly
Set r……


什么是你所说的无连接的方式 。 请问我这个查询:
 sql = "select * from guanxi where 用户编号=" & sBianHao & " and 关系='失效' and 最终关系=1"
  Rst.Close
  Rst.Open sql, Conn, adOpenStatic, adLockReadOnly
读取到的正好是我要进行UPDATE的数据,如何才能保证这个UPDATE语句的正常执行呢。
用事物
引用 9 楼 qiangchefang 的回复:
请问我这个查询:
 sql = "select * from guanxi where 用户编号=" & sBianHao & " and 关系='失效' and 最终关系=1"
  Rst.Close
  Rst.Open sql, Conn, adOpenStatic, adLockReadOnly
读取到的正好是我要进行UPDATE的数据,如何才能保证这个UPDATE……
sql = "select * from guanxi where 用户编号=" & sBianHao & " and 关系='失效' and 最终关系=1"
Rst.Close
Rst.Open sql, Conn, adOpenStatic, adLockOptimistic, adCmdText


试试这个。 +1
引用 7 楼 leftie 的回复:
SQL="update guanxi set 关系='有效' ,最终关系=0 where 用户表号=1200522 AND 用户户号=0 and 用户编号=1 and 最终关系=1"
conn.execute sql
数据库的问题连什么数据库和表,连接都没说! 很简单,执行前先关闭rst
引用 8 楼 qiangchefang 的回复:
什么是你所说的无连接的方式 。

就是最后一句
Set rst.ActiveConnection = Nothing

将 RecordSet 和 Connection 分离开来,这个记录集就成了一个单纯的数据对象,和数据库不再发生任何关系,也就不会影响后面的更新了。

又:rst 变量(包括其他的对象)用完后就 Set Nothing,用之前重新 New,可以避免前后多次操作之间内部成员的差异,这是编程原则。
引用 4 楼 king06 的回复:
有影响. adLockReadOnly 只读。无法更改数据 
要执行update 语句,不如直接Conn.execute("your sql")


执行UPDATE和Conn.execute("your sql")  不都会受到adLockReadOnly的影响吗?
看来这个是你同学,一样的问题:
http://topic.csdn.net/u/20110223/08/31e5b230-4361-4ceb-913c-5b4a817e5c58.html
引用 16 楼 qiangchefang 的回复:
引用 4 楼 king06 的回复:
有影响. adLockReadOnly 只读。无法更改数据
要执行update 语句,不如直接Conn.execute("your sql")


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

直接用execute方法就没是说没有用你那个rst.open啊...查询才用open方法比较方便
补充:VB ,  网络编程
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,