三层取返回值问题 (100分)

  • 主题发起人 主题发起人 goldstone
  • 开始时间 开始时间
http://www.delphibbs.com/delphibbs/dispq.asp?lid=800605
 
Huzzz:首先谢谢你,你的这种方法做过,delta里的数据我都改变了,但是clientdataset还是没有取得到,
不知道是为什么?

free_knight:你好,你的这种方法我在此之前已经做过,没有用的,我现在的问题是如何在应用服务器里
将Delta的数据返回给clientdataset,本来是delta里的数据在提交结束后会自动返回给clientdataset,我只要
改变delta里的数据就可以了,可是这样还是不行,clientdataset还是没有得到,不知道为什么?
你们有没有这样的问题,试试看,分数可以继续增加!
再次谢谢大家!!!!

 
kmyan,是不要显示id但是我需要返回给clientdataset,比如交易时间(服务器系统时间)也需要显示吧
我用的是sql server
 
又:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=802203
 
Huzzz先谢谢你了,其实我是想通过别的更简单的方法,你这种方法我用过,其实如果要这样将整个数据从服务器
传回来,大可不必,只要将修改过的id和time通过OwnerData打包回给clientdataset就可以了,
完全没有必要整个打包回来,大家再想想,有没有更好的办法,谢谢了

再次谢谢Huzzz和为此问题辛苦的各位
 
看仔细点,我正是“将修改过的id和time通过OwnerData打包回给clientdataset”,
而不是“整个打包回来”。
!!!
!!!
 
只需将中间层DataSetProvider控件的poPropogateChange属性改为True就可以了
 
whsunbin说得好。我怎么没有发现,DELPHI已经帮我们做了。
 
原来如此,受教,受教
 
whsunbin 将中间层DataSetProvider控件的poPropogateChange属性改为True还是不行,帮忙看看程序
procedure TagentserverRDM.dspGetXingyeBeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet;
DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind;
var Applied: Boolean);
begin
if UpdateKind =Ukinsert then
begin
deltaDs.Edit;
deltaDs.FieldByName('Postdate').Value :=now;
deltaDs.FieldByName('id').Value :=11111;
deltaDs.post;
end;
UpdateXingye(DeltaDS, UpdateKind);
Applied:=true;
end;


procedure TagentserverRDM.UpdateXingye(DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind);
begin
case UpdateKind of
ukInsert: //增加
begin
AssignFieldValue(DeltaDS, spXingyeInsert, 'Id', '@id');
AssignFieldValue(DeltaDS, spXingyeInsert, 'PostDate', '@postdate');
AssignFieldValue(DeltaDS, spXingyeInsert, 'Title', '@Title');
AssignFieldValue(DeltaDS, spXingyeInsert, 'content', '@content');
AssignFieldValue(DeltaDS, spXingyeInsert, 'origin', '@origin');
AssignFieldValue(DeltaDS, spXingyeInsert, 'from_url', '@from_url');
spXingyeInsert.ExecProc;
end;
ukModify : //修改
begin
AssignFieldValue(DeltaDS, spXingyeEdit, 'Title', '@Title');
AssignFieldValue(DeltaDS, spXingyeEdit, 'content', '@content');
AssignFieldValue(DeltaDS, spXingyeEdit, 'origin', '@origin');
AssignFieldValue(DeltaDS, spXingyeEdit, 'from_url', '@from_url');
spXingyeEdit.ExecProc;
end;
ukDelete : //删除
begin
spXingyeDelete.Parameters.ParamByName('@ID').Value := DeltaDS.FieldByName('Id').Asstring;
spXingyeDelete.ExecProc;
end;
end;
end;


procedure TagentserverRDM.AssignFieldValue(DeltaDS: TCustomClientDataSet;
adostore : TADOStoredProc;
const sField, sID : string);
var
aField : TField;
Value: Variant;
begin
aField := DeltaDS.FieldByName(sField);
Value := aField.NewValue;
if VarIsEmpty(Value) then
adostore.Parameters.ParamByName(sID).Value := aField.OldValue
else
adostore.Parameters.ParamByName(sID).Value := Value;
end;


结果在客户端还是没有得到id和postdate,拜托大家了
 
poautorefresh=true也是没有用的,难道非得在clientdataset.refresh,这样的话不是把所有的东西全部再回传回来
感觉不好,大家有没有好办法
 
我试了一下,的确不行。但把eBeforeUpdateRecord中的:
deltaDs.FieldByName('id').Value :=11111;
改为
deltaDs.FieldByName('id').NewValue :=11111;
就行了,你不妨试试。我的是DELPHI6。
 
大家有空看看我的问题,谢谢:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=798342
 
大家继续帮忙
 
procedure TagentserverRDM.dspGetXingyeAfterUpdateRecord(Sender: TObject;
SourceDS: TDataSet;
DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind);
begin
if UpdateKind =Ukinsert then
begin
deltaDs.Edit;
deltaDs.FieldByName('Postdate').newValue :=spxingyeinsert.Parameters.parambyname('@postdate').value;
deltaDs.FieldByName('id').newValue :=spxingyeinsert.Parameters.parambyname('@return_value').value;
deltaDs.post;
end;
end;

spxingyeinsert.Parameters.parambyname('@return_value').value;
是返回自增id的值,现在想把它deltaDs.FieldByName('id').newValue :=spxingyeinsert.Parameters.parambyname('@return_value').value;
碰到的问题是deltaDs.FieldByName('id').newValue 是无法修改的,这是显然的,有没有什么办法修改id的属性,让他既是自增型,在这时候也可以修改,拜托大家了
 
procedure TagentserverRDM.dspGetXingyeAfterUpdateRecord(Sender: TObject;
SourceDS: TDataSet;
DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind);
begin
if UpdateKind =Ukinsert then
begin
deltaDs.Edit;
deltaDs.FieldByName('Postdate').newValue :=spxingyeinsert.Parameters.parambyname('@postdate').value;
deltaDs.FieldByName('id').readonly:=false;
deltaDs.FieldByName('id').
deltaDs.FieldByName('id').newValue :=spxingyeinsert.Parameters.parambyname('@return_value').value;
deltaDs.Post;
end;

end;

无法将deltaDs.FieldByName('id').readonly:=false;这句话post,如果不post可以,大家帮忙想办法
 
多人接受答案了。
 
后退
顶部