TClientDataSet 手動修改Data資料

來源:互聯網
上載者:User

使用TClientDataSet控制項與DBGrid控制項編輯顯示資料視窗。

在設計過程中,ClientDataSet與DBGrid放置在兩個不同的動方,手工串連。由於ClientDataSet中的資料,部分在DBGrid中要求不顯示。

在新增的行中,隱藏的列是必要欄位,不可為空值,如果提交到資料庫中,當然要報欄位不可為空的錯了。

要怎麼才能手工加入隱藏的欄位資料呢?

ClientDataSet 有Data與Delte對象,前者為從資料來源中取到記憶體的資料,後然是記憶體修改資料,等待更新到物理資料來源中的資料。

Delte中的資料可以通過建立一個新的ClientDataSet 對象來得到Data,能知道有哪些資料是等待提交的。但是新的ClientDataSet中的Data不能提交到前者ClientDataSet的Delte裡。這個方法行不通了。Delte的只能用來查看資料,不能再修改。再者,如果是修改的資料,那麼有兩條,怎麼判斷修改的資料也是個麻煩的事。所以,Delte這裡行不通。

ClientDataSet有UpdateStatus方法,用來表述Data資料的Modify情況。哈~~可往這裡發展。

UpdateStatus的屬性TUpdateStatus = (usUnmodified, usModified, usInserted, usDeleted);

Data中的資料,前面講了,是從資料庫中取到的記憶體資料,但是問題又來了,新的Insert的資料,這裡面沒有。怎麼辦?使用Post,提交到記憶體資料裡面。只要沒有ApplyUpdates過,UpdateStatus的值都沒有重設過。

if ClientDataSet.UpdateStatus = TUpdateStatus (usUnmodified, usModified, usInserted, usDeleted) then 來判斷行的Modify狀態吧。要手工加哪個就加哪個。但這個方法也有問題。

在 while not eof do 迴圈中,每Next一次,就必須設定Edit一次,可以解決提示不能編輯的錯(dataset not in edit or insert mode)。這個還沒有找到是在哪裡跳轉的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.