所以我有一個ClientDataset(cdsM1)和一個嵌套細節(cdsD1)。我需要在ApplyUpdates之前打印它,所以我克隆它們(cdsMclone和cdsDclone)並過濾主克隆只顯示一個主記錄。如何在ApplyUpdates之前將修改的記錄刷新到CloneSource?
打印後,我需要更新記錄。起初,我想是這樣的:
cdsMclone.Edit;
cdsMclone.FieldByName('DATEPRINTED').AsString := Now;
cdsMclone.Post;
cdsMclone.ApplyUpdates(0);
但在此之後,如果我改變什麼更多源的ClientDataSet,cdsM1.ApplyUpdates(0)
產生衝突(和我的意思一個,你應該在OnReconcileError
響應)。但是這個不應該顯示給用戶。另外,使用這種方法,我至少向數據庫發送兩個請求。
一種解決方法是使用CloneSource
屬性。例如:
cdsMclone.CloneSource.Edit;
cdsMclone.CloneSource.FieldByName('DATEWASPRINTED').AsString := Now;
cdsMclone.CloneSource.Post;
這樣一來,我可以叫cdsM1.ApplyUpdates(0)
無後顧之憂。但我真的不喜歡這樣。似乎代碼正在改變它不應該直接做的事情。此外,如果將來我需要改變嵌套細節中的某些內容,代碼將如何顯示?
還有其他方法可以將克隆的客戶端數據集中的更改返回給源代碼?
感謝您的回答。我使用'CloneCursor()',你描述的是我期待的。但不是我實現的......呃,過濾器是基於PrimaryKey的。因此,至少在理論上,不應該與任何數據或條件相沖突。就像'cdsMclone.filter:='IDMaster ='+ cdsM1.fieldByName('IDMASTER')。asString;'。由於打印成功,我認爲代碼也可以。 也許我需要創建一個示例代碼來顯示這一點。不幸的是,我只能在明天再次訪問代碼時才能這樣做。 – EMBarbosa 2014-11-24 23:20:41