請問ClientDataSet新增一筆資料後,在對此資料修改會出錯? |
答題得分者是:GrandRURU
|
chris681016
中階會員 發表:69 回覆:122 積分:98 註冊:2006-10-12 發送簡訊給我 |
資料庫連結方式 SQLConnection1<---SQLQuery1<--DataSetProvider1<--ClientDataSet1 放在Data Module裡面
procedure TfCust_edit.FormActivate(Sender: TObject); begin with fdm.Single_sql do begin close;sql.Clear; sql.Add('select * from CUST_0000 '); sql.Add('order by cust_no '); open; end; fdm.Single_cds.PacketRecords:=1000; if fdm.Single_cds.Active=false then fdm.Single_cds.Active:=true; end; 客戶代號 客戶名稱 00001 測式客戶0001 fdm.Single_cds.Post; fdm.Single_sql.Refresh; //不然無法看到新增的資料,因為我要馬上寫回資料庫,只有在新增加在做此動作 // POST後就寫回資料庫 procedure Tfdm.Single_cdsAfterPost(DataSet: TDataSet); begin if Single_cds.ChangeCount>0 then begin Single_cds.ApplyUpdates(0); end; end; 如果在對 客戶代號 00001 修改客戶名稱為 測式客戶11111 fdm.Single_cds.Post; 就會出現 「Record not found or change another user」 如果在 fdm.Single_cds.Post; fdm.Single_sql.Refresh; 增加此行 fdm.Single_cds.Refresh; //新增的資料在修改就不會錯,但是,速度會比較慢,2萬筆資料測式。 //如果不加 fdm.Single_cds.Refresh; 我去看過 fdm.Single_cds 裡的Data也有此筆資料。 如果post不馬上 ApplyUpdates 就不會有問題。 還是一定要 fdm.Single_sql.Refresh; fdm.Single_cds.Refresh; 麻煩各位大大了~~~~~~ 編輯記錄
chris681016 重新編輯於 2012-09-18 03:20:53, 註解 無‧
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
你開錯元件了
程式應該像這樣 [code delphi] procedure TfCust_edit.FormActivate(Sender: TObject); begin with fdm.Single_sql do begin close; sql.Clear; sql.Add('select * from CUST_0000 '); sql.Add('order by cust_no '); //open; // 這邊Open是開啟Single_sql end; fdm.Single_cds.PacketRecords:=1000; if fdm.Single_cds.Active=false then fdm.Single_cds.Active:=true; // ClientDataset會自動帶入SQLQuery的資料,因為它們是連動的 end; [/code] 所有的動作都應該是對ClientDataSet做,包含refresh的行為都應該是ClientDataSet.Refresh;
編輯記錄
GrandRURU 重新編輯於 2012-09-18 04:37:26, 註解 無‧
|
chris681016
中階會員 發表:69 回覆:122 積分:98 註冊:2006-10-12 發送簡訊給我 |
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
這樣寫就對了
讓 DataModule 負責資料存取相關的動作 Form 負責 UI 互動相關的動作 ( 不然幹麼要叫做 DataModule?就是希望拿來當作資料存取類別的基礎類別,而它又有元件容器的性質, 可以幫忙管理內部元件的生命週期 ) ===================引 用 chris681016 文 章=================== 感謝大大的指導^^ 之前都用ADOQUERY在寫,所以不怎麼了解DBX的運作~~~~。 再問一下?~~~~~~~~~~~~~~ 我看很多寫回資料都在DataSetProvider 跟 ClientDataSet裡面處理,尤期是 M/D 架構在連結到別的TABLE 而 DataSetProvider 跟 ClientDataSe都放在DataModule,那不就很多資料處理都在 DataModule裡寫囉!! 這樣是正確的嗎?
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
chris681016
中階會員 發表:69 回覆:122 積分:98 註冊:2006-10-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |