找不到要更新的列 |
尚未結案
|
mtyen
一般會員 ![]() ![]() 發表:13 回覆:16 積分:5 註冊:2004-02-03 發送簡訊給我 |
各位大大:
請問我用ADOConnection, ADODataSet, DataSource, DBGrid, 將ADODataSet所
找到Table的值給DataSource,在從DBGrid show出,然後放2個button,一個Add record,一個Delete record,為何每次Delete都會產生Error, "找不到要更新的列",我嘗試在ADODataSet->Delete()前,先ADODataSet->Close(); ADODataSet->
Open(),還是會有Error,請問是何原因,之前此問題有人post過,但我不大了解,
請問有人知道嗎?煩請告知?
|
supman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
|
mtyen
一般會員 ![]() ![]() 發表:13 回覆:16 積分:5 註冊:2004-02-03 發送簡訊給我 |
supman大大:
上篇文章寫道:
This happens because ADO needs to find the record you are ed-iting in your
database to make a change to it. If it can't find the recor-d this error is
generated.
ADODataSet1.Properties['Update Criteria'].value :=adCriteria-Key 請問BCB的程式要如何修改,我有一個button,按delete後,程式是這樣
void __fastcall TForm1::Button3Click(TObject *Sender)
{
ADODataSet1->Delete();
} 以下這行要放在哪裡,要如何改成BCB
ADODataSet1.Properties['Update Criteria'].value :=adCriteria-Key
|
mtyen
一般會員 ![]() ![]() 發表:13 回覆:16 積分:5 註冊:2004-02-03 發送簡訊給我 |
|
supman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
|
mtyen
一般會員 ![]() ![]() 發表:13 回覆:16 積分:5 註冊:2004-02-03 發送簡訊給我 |
|
raymond5
一般會員 ![]() ![]() 發表:5 回覆:13 積分:3 註冊:2003-10-03 發送簡訊給我 |
關於"找不到要更新的列,最後讀取的值已變更"這個問題,昨天也碰過,看了版上大大的回答,仍然不甚瞭解,後來花了很多時間,終於查出原因,這個錯誤訊息好像要告訴你你要變更的列已不見了,其實它還在,只是Delphi要更新資料時,會把存在記憶體的資料與資料庫再比對一次,我碰到的問題就是,某一個Decimal欄位一開始值不是0,而是null,讀到記憶體時變成什麼值就不知道了,這個時候再修改它的值存回時,就會出現上述的錯誤,此時把這個Decimal欄位的初始值改為0,重新再執行後,就可以了,以上是我的經驗,也許不能解決上述的問題,但我個人却碰過好幾次,這個經驗也許對某些人有用。
------
Raymond Lee |
aftcast
站務副站長 ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
不知是否該table有設定pk ? 若沒有pk的情形下,指向該筆資料,就會使用一些特別的比對方式來找到那筆,而恰好一些欄位又是null這種特別值,所以比對不出來…
結論: 我猜應該是 table 沒建立唯一的pk 會有這類的事發生,不知是否如此? ===================引 用 raymond5 文 章=================== 關於"找不到要更新的列,最後讀取的值已變更"這個問題,昨天也碰過,看了版上大大的回答,仍然不甚瞭解,後來花了很多時間,終於查出原因,這個錯誤訊息好像要告訴你你要變更的列已不見了,其實它還在,只是Delphi要更新資料時,會把存在記憶體的資料與資料庫再比對一次,我碰到的問題就是,某一個Decimal欄位一開始值不是0,而是null,讀到記憶體時變成什麼值就不知道了,這個時候再修改它的值存回時,就會出現上述的錯誤,此時把這個Decimal欄位的初始值改為0,重新再執行後,就可以了,以上是我的經驗,也許不能解決上述的問題,但我個人却碰過好幾次,這個經驗也許對某些人有用。
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
raymond5
一般會員 ![]() ![]() 發表:5 回覆:13 積分:3 註冊:2003-10-03 發送簡訊給我 |
|
aftcast
站務副站長 ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
別客氣啦,大哥 :)
我也是好奇而已,不過照你的情形來講,感覺上只要是table中存在著null值,就好像會出問題,不知這樣的推論會不會不夠準備。因為你說該table已用一陣子,也都很ok,唯就是加一欄,然後預設值是null,然後試著去改那一欄,就掛了… 這是很好的information。但可以進一步的了解一下是哪種db呢? access? mssql? ?? 用的是哪一種連結方式呢? tadocommand ? tadoquery? … 因為樓上的曾有說改了db 就好了… 不知和db是否有關? 我是覺得和用什麼方式來connect 比較有關,所以,如果可以,補充一下這方面的資料,大家更有收獲了! 當然,消極一點的做法就是… 盡量避開 null ,把defual value 都設為0 之類的…但有些時候又必需要null才方面做一些判斷… 二難! ===================引 用 raymond5 文 章=================== 感謝Aftcast關心我這個問題,我的情況不是PK的問題,這個Table已經有兩個PK值,一個是自動遞增的id,一個是單號(sheetno)。實際的情況是,這個Table維護的程式已經用一陣子了,前兩天因為USER要再加一個數字的欄位,就直接加上去了,也沒注意到它的機定值是null,結果就出現”找不到要更新的列..."的問題,個人覺得這個錯誤訊息很容易引導人往錯誤的方向思考,所以就提了出來,也許大家會碰的到。
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
raymond5
一般會員 ![]() ![]() 發表:5 回覆:13 積分:3 註冊:2003-10-03 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |