U
urlabelsoft
Unregistered / Unconfirmed
GUEST, unregistred user!
三層中主從表的提交方式------求最佳方式(集事務性﹐同步性)
本來去年寫過一些三層的程序﹐現在拿出來看了一下﹐
感覺而些不足。我以前的從表的提交是沒有問題的﹐只是主從表的提交﹐
我感覺有些問題﹐我以前的方式是﹕
**************************************************
if CDSmaster.State in [dsInsert,dsEdit] then
begin
CDSMaster.Post;
if CDSmaster.ChangeCount>0 then
begin
applyupdata(CDSMaster,Maintable,keyfield);
CDSMaster.MergeChangeLog;
end;
****以上是先提交主表*****
然后在主表的afterpost里寫入﹕
if CDSsub.State in [dsEdit,dsInsert] then
CDSsub.Post;
if CDSsub.ChangeCount > 0 then
begin
applyupdata(CDSsub,subtable,keyfield);
CDSsub.MergeChangeLog;
end;
*******************采用這種方式提交從表**********
當然﹐我在里面的有設置好主從的關聯字﹐以及在中間層提交時﹐
我在單表的提交中設置了事務的啟動。
**************************************************
現在問題﹕
從代碼中可以看出﹐我是POST后﹐還保存在內存中﹐就先真正提交了從表﹐
然后再提交主表。問題如下﹕
1﹐如果從表提交成功﹐再提交主表﹐而此時主表提交失敗﹐那數據表中不是有從表沒有主表數據﹐多了一些垃圾數據﹗
2﹐如果從表提交失敗﹐主表一樣也會提交﹐當然﹐這個我可以控制它。(不算大問題)
求最好的三層的主從提交方式﹐當然﹐我所有的提交﹐不是用clientdataset.applyupdate
我采用的是送clientdataset.data到中層﹐進行處理提交。
本來去年寫過一些三層的程序﹐現在拿出來看了一下﹐
感覺而些不足。我以前的從表的提交是沒有問題的﹐只是主從表的提交﹐
我感覺有些問題﹐我以前的方式是﹕
**************************************************
if CDSmaster.State in [dsInsert,dsEdit] then
begin
CDSMaster.Post;
if CDSmaster.ChangeCount>0 then
begin
applyupdata(CDSMaster,Maintable,keyfield);
CDSMaster.MergeChangeLog;
end;
****以上是先提交主表*****
然后在主表的afterpost里寫入﹕
if CDSsub.State in [dsEdit,dsInsert] then
CDSsub.Post;
if CDSsub.ChangeCount > 0 then
begin
applyupdata(CDSsub,subtable,keyfield);
CDSsub.MergeChangeLog;
end;
*******************采用這種方式提交從表**********
當然﹐我在里面的有設置好主從的關聯字﹐以及在中間層提交時﹐
我在單表的提交中設置了事務的啟動。
**************************************************
現在問題﹕
從代碼中可以看出﹐我是POST后﹐還保存在內存中﹐就先真正提交了從表﹐
然后再提交主表。問題如下﹕
1﹐如果從表提交成功﹐再提交主表﹐而此時主表提交失敗﹐那數據表中不是有從表沒有主表數據﹐多了一些垃圾數據﹗
2﹐如果從表提交失敗﹐主表一樣也會提交﹐當然﹐這個我可以控制它。(不算大問題)
求最好的三層的主從提交方式﹐當然﹐我所有的提交﹐不是用clientdataset.applyupdate
我采用的是送clientdataset.data到中層﹐進行處理提交。