多层应用中的数据更新问题(100分)

  • 主题发起人 主题发起人 zzbyy
  • 开始时间 开始时间
Z

zzbyy

Unregistered / Unconfirmed
GUEST, unregistred user!

1.在前端模块中,clietdataset通过applyupdatas方法将delta封包发到服务器,
为何相应的provider只对delta中的第一笔数据调用beforeupdatarecord事件,
据说datasetproviser应对每一笔数据调用此方法,really??
2.如何将dataset的数据中的一列筛选出来,赋给另一clietdataset的delta属性?
 
Provider收到數據包觸發此事件后﹐數據包里的每一條記錄都經過了此事件
因此您完全可以將符合預設特征的某一筆資料篩選出來
 
Delta属性是只读的,程序员不能对其赋值.你可以将dataset.data(delta封包)指定给
另一个clientdataset的data封包,至于筛选一列,你可以将你需要的记录主键作为参数
也传入中间件然后在dataset.data中查询你需要的记录
 
现在最主要的问题是,对于上传的delta封包中的多笔纪录,provider的beforeupdatarecord
事件只更新了一笔纪录,该事件的内容是:
var a:string
begin
a:=deltads。fieldbyname(‘tm’)。value;
Adoquery1。sql。clear;
Adoquery1。sql。add(update tb1 hc=hc-1 where tm=);
Adoquery1。sql。add(a);
Adoquery1。execsql;
end;
 
建议:
1.在onupdatedata事件中,显示delta封包的数据。
2.detasetprovider控件的datasetresolver属性设为true,然后在beforeupdatarecord
事件中写
//
updaterec(deltads);
applied:=true;
//
procedure updaterec(deltads:TClientdataset);
var a:string
begin
a:=deltads。fieldbyname(‘tm’)。oldvalue;
Adoquery1。sql。clear;
Adoquery1。sql。add(update tb1 hc=hc-1 where tm=);
Adoquery1。sql。add(a);
Adoquery1。execsql;
end;




 
将detasetprovider的Options的poAllowMultiRecordUpdates改为True
 
applied:=True
 
后退
顶部