現象:
執行到以下賦值語句的時候會報,多步操作產生錯誤(如圖)
<?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完整版