將主索引內的數值,重新排序所造成錯誤 |
答題得分者是:GrandRURU
|
xfox
一般會員 ![]() ![]() 發表:5 回覆:14 積分:8 註冊:2003-04-18 發送簡訊給我 |
請問一下主索引問題
若資料1~10,我需要在其中的第五筆資料新增一筆資料,並將主索引內的數值重新排序,但排序後會發生"table is read only"錯誤以下為程式內容 int no=UserProgramQuery->FieldByName("CutNO")->AsFloat 1; //取得插入的ID位置 UserProgramQuery->Insert(); //插入一筆新資料 UserProgramQuery->First(); for(int i=1;i<=UserProgramQuery->RecordCount 1;i ){ int aa = UserProgramQuery->FieldByName("X")->AsFloat; if(i == no){continue;} //先將插入的ID預留 UserProgramQuery->Edit(); UserProgramQuery->FieldByName("CutNO")->AsFloat =i; //重新排序 UserProgramQuery->Post(); UserProgramQuery->Next(); } UserProgramQuery->FieldByName("CutNO")->AsFloat = no UserProgramQuery->ApplyUpdates(); //程式錯誤 編輯記錄
xfox 重新編輯於 2009-09-24 13:49:10, 註解 無‧
|
GrandRURU
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
應該是這樣,請再試試
[code cpp] int no=UserProgramQuery->FieldByName("CutNO")->AsFloat 1; //取得插入的ID位置 UserProgramQuery->Insert(); //插入一筆新資料 UserProgramQuery->First(); for(int i=1;i<=UserProgramQuery->RecordCount 1;i ) { int aa = UserProgramQuery->FieldByName("X")->AsFloat; if(i == no){continue;} //先將插入的ID預留 UserProgramQuery->Edit(); UserProgramQuery->FieldByName("CutNO")->AsFloat =i; //重新排序 UserProgramQuery->Post(); UserProgramQuery->Next(); } //缺這行 UserProgramQuery->Edit(); UserProgramQuery->FieldByName("CutNO")->AsFloat = no; //還有這行 UserProgramQuery->Post(); UserProgramQuery->ApplyUpdates(); //程式錯誤 [/code] ===================引 用 xfox 文 章=================== 請問一下主索引問題 若資料1~10,我需要在其中的第五筆資料新增一筆資料,並將主索引內的數值重新排序,但排序後會發生"table is read only"錯誤以下為程式內容 int no=UserProgramQuery->FieldByName("CutNO")->AsFloat 1; //取得插入的ID位置 UserProgramQuery->Insert(); //插入一筆新資料 UserProgramQuery->First(); for(int i=1;i<=UserProgramQuery->RecordCount 1;i ){ int aa = UserProgramQuery->FieldByName("X")->AsFloat; if(i == no){continue;} //先將插入的ID預留 UserProgramQuery->Edit(); UserProgramQuery->FieldByName("CutNO")->AsFloat =i; //重新排序 UserProgramQuery->Post(); UserProgramQuery->Next(); } UserProgramQuery->FieldByName("CutNO")->AsFloat = no UserProgramQuery->ApplyUpdates(); //程式錯誤 |
xfox
一般會員 ![]() ![]() 發表:5 回覆:14 積分:8 註冊:2003-04-18 發送簡訊給我 |
|
GrandRURU
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
xfox
一般會員 ![]() ![]() 發表:5 回覆:14 積分:8 註冊:2003-04-18 發送簡訊給我 |
|
GrandRURU
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
先重新對Table is read-only的問題做解答
參閱 delphi.ktop.com.tw/board.php 內的 「請將Query元件的RequestLive屬性值設為﹕True 利用SQL查詢語句回傳的資料為ReadOnly(唯讀狀態)﹐但其可以透過RequestLive屬性值為True將其改成讀寫狀態﹒」 ==================== 再來是 UserProgramQuery->ApplyUpdates(); //程式錯誤 在help範本中是這樣寫的 The following procedure illustrates how to apply a dataset cached updates to a database in response to a button click: [code cpp] void __fastcall TForm1::ApplyButtonClick(TObject *Sender) { Database1->StartTransaction(); try { CustomerQuery->ApplyUpdates(); // try to write the updates to the database Database1->Commit(); // on success, commit the changes; } catch (...) { Database1->Rollback(); // on failure, undo the changes throw; // throw the exception to prevent a call to CommitUpdates! } CustomerQuery->CommitUpdates(); // on success, clear the cache } [/code] 最後,我利用BDE DBDemos對employee.db做了以下處理,到post這段可正確執行 [code cpp] int no=UserProgramQuery->FieldByName("EmpNO")->AsFloat 1; //取得插入的ID位置 UserProgramQuery->First(); for(int i=1;i<=UserProgramQuery->RecordCount 1;i ) { if(i == no){continue;} //先將插入的ID預留 UserProgramQuery->Edit(); UserProgramQuery->FieldByName("EmpNO")->AsFloat =i; //重新排序 UserProgramQuery->Post(); UserProgramQuery->Next(); } UserProgramQuery->Edit(); UserProgramQuery->FieldByName("EmpNO")->AsFloat = no; UserProgramQuery->Post(); [/code] 如果這樣還是沒辦法解決你的問題,請你再提供更完整的程式碼及環境內容,看有沒有高手可以來幫助你解決問題,以上。 |
xfox
一般會員 ![]() ![]() 發表:5 回覆:14 積分:8 註冊:2003-04-18 發送簡訊給我 |
|
GrandRURU
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
key是可以修改的,但不能重複。
用的是ado元件嗎? ===================引 用 xfox 文 章=================== 我有抓出問題了,因UserProgramQuery->FieldByName("CutNO")->AsFloat,我將它設為主索引而我插入一筆資料後又重新將主索引內的數值重新編寫號碼,造成的資料庫下達UserProgramQuery->ApplyUpdates()時錯誤。 難道說主索引內的數值是不能被重新改寫的嗎?我是使用access去做資料庫聯結,跟資料庫有關嗎? |
xfox
一般會員 ![]() ![]() 發表:5 回覆:14 積分:8 註冊:2003-04-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |