線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2177
推到 Plurk!
推到 Facebook!

原data有null field ,upadte後為什麼applyupdates失敗

尚未結案
daniel
一般會員


發表:12
回覆:20
積分:16
註冊:2002-06-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-24 22:14:27 IP:221.224.xxx.xxx 訂閱
DB=oracle, delphi 7 
app server: TDatabase TQUERY TUpdateSQL Tdatasetprovider
client端 TSocketconnection TClientdataset TDatasource TDBGrid

Clientdataset open後,假設只有第1筆有一個欄位是null (table允許null field 存在),其他records的data都没有null field
當修改第1筆的任何欄位值, applyupdates(0)失敗, 但修改其他records則applyupdates(0)成功

請問先進,我要如何update第1筆的資料
編輯記錄
taishyang 重新編輯於 2007-05-25 15:25:16, 註解 無‧
daniel
一般會員


發表:12
回覆:20
積分:16
註冊:2002-06-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-25 16:02:28 IP:221.224.xxx.xxx 訂閱
我找到原因了, 很對不起原來凶手是我自已,希望自首無罪.
我在server端的TupdateSQL的SQL string的were子句因為没有primary key所有放入所有的欄位,.
造成where :old.field =:new.field時, 如果:old.field為null值會失敗
但是問題來了,這會是delphi7的bug嗎?記得以前delphi-5好像没有這問題?
在没有primary key情況下,SQL strings當然要將所有欄位的old & new值納入where子句內比較,
那不就没輒了.我想元凶應是delphi-7吧,不知有那仁兄遇過類似情況,也請告知如何解決? Thanks.

daniel
一般會員


發表:12
回覆:20
積分:16
註冊:2002-06-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-25 16:30:30 IP:221.224.xxx.xxx 訂閱
我找到原因了, 很對不起原來凶手是我自已,希望自首無罪.
我在server端的TupdateSQL的SQL string的were子句因為没有primary key所有放入所有的欄位,.
造成where field =:old_field時, 如果:old_field為null值會失敗
但是問題來了,這會是delphi7的bug嗎?記得以前delphi-5好像没有這問題?
在没有primary key情況下,SQL strings當然要將所有欄位的old & new值納入where子句內比較,
那不就没輒了.我想元凶應是delphi-7吧,不知有那仁兄遇過類似情況,也請告知如何解決? Thanks.
(上篇where子句誤值更正)
daniel
一般會員


發表:12
回覆:20
積分:16
註冊:2002-06-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-26 09:45:13 IP:221.224.xxx.xxx 訂閱
最後不得已,我只好將SQL STRINGS的where子句改為
where nvl(field1,'string') = nvl(:old_field1,'string') and nvl(field2,'string') = nvl(:old_field2,'string') and .....

'string': 就找一串user不可能輸的字串
系統時間:2017-10-19 2:38:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!