送分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.RecordSQL="update guanxi set 关系='有效' ,最终关系=0 where 用户表号=1200522 AND 用户户号=0 and 用户编号=1 and 最终关系=1"
rst.CursorLocation = adUseClient
rst.Open sql, Conn, adOpenStatic, adLockReadOnly
Set rst.ActiveConnection = Nothing
conn.execute sql
什么是你所说的无连接的方式 。 请问我这个查询:
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 数据库的问题连什么数据库和表,连接都没说! 很简单,执行前先关闭rst
就是最后一句
Set rst.ActiveConnection = Nothing
将 RecordSet 和 Connection 分离开来,这个记录集就成了一个单纯的数据对象,和数据库不再发生任何关系,也就不会影响后面的更新了。
又:rst 变量(包括其他的对象)用完后就 Set Nothing,用之前重新 New,可以避免前后多次操作之间内部成员的差异,这是编程原则。
执行UPDATE和Conn.execute("your sql") 不都会受到adLockReadOnly的影响吗?
看来这个是你同学,一样的问题:
http://topic.csdn.net/u/20110223/08/31e5b230-4361-4ceb-913c-5b4a817e5c58.html
直接用execute方法就没是说没有用你那个rst.open啊...查询才用open方法比较方便
补充:VB , 网络编程