使用clientdataset进行多表查询,怎么才能做到删除其中一个表的记录? ( 积分: 200 )

  • 主题发起人 主题发起人 wwq007007
  • 开始时间 开始时间
W

wwq007007

Unregistered / Unconfirmed
GUEST, unregistred user!
我在作三层时,用到了多表查询,设置了resolvedataset := true 即可多表更新,但是不能删除其中的一个表的记录.也不能向一个表添加添加
如: select a.id a.name,b.desc,c.P_name from a ,b,c where a.id=b.id and a.P_id=c.p_id 对于这个查询可以更新,但是我向向a表中插入一条记录,只输入了a表的id和
name两个字段值,保存时会提示,b,c表字段不能为空.后来发现,在datasetprovider.Beforeupdaterecord中的deltads含有所有的字段,可我已经在客户端设置b和c表的字段没有pinupdate这个属性了
 
我在作三层时,用到了多表查询,设置了resolvedataset := true 即可多表更新,但是不能删除其中的一个表的记录.也不能向一个表添加添加
如: select a.id a.name,b.desc,c.P_name from a ,b,c where a.id=b.id and a.P_id=c.p_id 对于这个查询可以更新,但是我向向a表中插入一条记录,只输入了a表的id和
name两个字段值,保存时会提示,b,c表字段不能为空.后来发现,在datasetprovider.Beforeupdaterecord中的deltads含有所有的字段,可我已经在客户端设置b和c表的字段没有pinupdate这个属性了
 
在服务端的TDataSetProvider。ONUpdateData事件里指定哪些字段不需要更新
在客户端指定没有用。这可能是DELPHI的BUG
而且在DELTA里没有办法移除不需要更新的字段
反正我一直无法在客户端搞定,还希望高手指点。
我的代码大体如下:
procedure TTDMServer.DSPUpdateData(Sender: TObject;
DataSet: TCustomClientDataSet);
var
i,iCount:Integer;
begin
iCount:=DataSet.FieldCount-1;
for i := 0 to iCountdo
if (DataSet.Fields.FieldName='****') then
DataSet.Fields.ProviderFlags:=[]
else
DataSet.Fields.ProviderFlags:=[pfInUpdate];
 //鍵值字段是一定要的
for i := 1 to iCountdo
DataSet.FindField(GetPartStr(PKeyField,i)).ProviderFlags:=[pfInKey,pfInUpdate];
end;
 
多谢了,现在只能先按这个方法来了.
 
我也测试过,在客户端指定的属性ProviderFlags 到服务器就没有用了,好像TDataSetProvider是根据他连的adoquery来设置的,如果在adoquery上设置,则可以删除和添加,修改,不用写任何代码,可sql语句必须写在服务器端.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
493
import
I
后退
顶部