我用D7的web service 向导创建一个工程,并定义了接口。
在客户端我用SoapConnection组件与它连接,并用ClientDataSet实现与服务器的DataSetProvider联接,
所有数据的读及写(用ClientDatSet.ApplyUpdates方法)是没有问题的。
同时在客户端用HTTPRIO组件实现调用服务器的接口方法,也是没有问题的。
我想不用ClientDatSet.ApplyUpdates方法保存数据,而通过HTTPRIO组件调用服务器的方法来保存数据,将ClientdataSet.Delta传到服务器,在服务器中实现ApplyUpdate。
这种机制是否有问题?我不太清楚,在COM+中我是这样实现的。之所以要这样做是因为我想自己控制它的SQL语句来提交数据,因为我有其它业务逻辑要加上去,并非只保存单一个表哪么简单,所以不能用ClientDataSet.ApplyUpdates方法。这是必须这样做的。
在SOAP中我没有实现,不知是方法错了,还是机制不对。
服务器端的接口方法:
procedure Tff.UpdateData(const v_Delta1,v_UpdateTable1:OleVariant;
iMaxError: Integer;
out iErrorCount: Integer;v_UpdateOtherTabSqlTxt:string='');stdcall;
var i,j:Integer;
begin
try
WebDm.Adoquery1.close;
WebDm.ADOQuery1.SQL.Clear;
WebDM.adoquery1.SQl.text := 'SELECT * FROM '+ v_UpdateTable1 ;
WebDM.DataSetProvider1.UpdateMode := upWhereChanged;
WebDM.DataSetProvider1.ApplyUpdates(v_Delta1, i, j);
except
end;
end;
客户端:
procedure TForm3.Button3Click(Sender: TObject);
var i,j :Integer;
begin
if (ClientDataset1.State = dsEdit) or (ClientDataSet1.State = dsInsert) then
ClientDataSet1.Post;
if ClientDataSet1.ChangeCount > 0 then
(HTTPRIO1 as Iff).UpdateData(ClientDataSet1.Delta,'table1',i,j);//调用服务器接口方法企图实现保存动作
end;
以上方法肯定有问题,我想ClientDataSet是通过SoapConnection组件的DataSetProvider取数据,而提交时又用HTTPRIO组件的接口方法提交Delta,这应该是错误的思路,但我不知如何解决它!
请高手略点一二。