现象:
执行到以下赋值语句的时候会报,多步操作产生错误(如图)
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
开发环境:
VB+ADO2.7,数据库服务器为oracle9i,客户端为oracle9i精简版
分析:
开始以为是程序代码的原因,也看了网上的许多分析,一般产生这种情况的无非是以下原因:
1、 要更新的值跟字段类型不一致
2、 要更新值的长度大于字段定义的长度
3、 将空值插入非空字段中
这些原因基本上是逻辑造成的,但我查看了代码,均排除以上原因,而且最大的问题是,客户端如果安装的是9i完整版,那不会报上面这个错误,如果客户端装的是9i精简版,就会出现以上问题,有一个解决办法就是客户端直接用9i完整版安装,但一个问题是,完整版要<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1G多,精简版不到13M,有点不甘心。
再测,发现使用cnn.Execute “update…”方式,更新记录是可以的,而且用赋值的办法更新其他表多没问题,于是将F表drop重建,还是一样,再将F表drop,而且把表结构变掉,发现还是会报错,修改表名变为F_Z,不报错,太奇怪了,难道跟表名有关?
结论:
可能是9i精简版的一个BUG,不能对F表进行VB赋值操作
解决办法:
1、 修改表名,在数据库设计的时候不建议使用像a,b,f这样简单的表名
2、 修改更新方式,将其改为cnn.Execute “update…”方式
3、 客户端装9i完整版