实现M T S / C O M +更新对象(100分)

  • 主题发起人 主题发起人 ma_hongbing
  • 开始时间 开始时间
M

ma_hongbing

Unregistered / Unconfirmed
GUEST, unregistred user!
在李维的书里第九章里有个实现M T S / C O M +更新对象的例子,那位大虾知道客户端程序怎么写!
 
也就是在Midas,MTS与结合做C/S下的3层结构,如何实现数据更新
 
其实,MIDAS的本质,是利用COM技术做了一个IAPPSERVER接口。客户端的ClientDataSet.ApplyUpdate等操作最后都是调用IAppServer接口。而服务器端只要你生成一个MIDAS的APP SERVER工程,就自动有了这个接口。而所谓的更新,不过是利用这个接口里的一个接口函数将DELTA送给服务器。
在COM+上,你可以自己写一个接口函数,在这个接口函数里,客户端将ClientDataSet.Delta送给服务器端的COM+,由COM+负责把DELTA更新到数据库服务器。
 
客户端:
procedure TForm1.Btn_deleteClick(Sender: TObject);
var
uObj_CustomerInfo : ImtsUpdate_CustomerInfo;
vDatas_CustomerInfo : OleVariant;
iMaxErrors: Integer;
iErrorCount: Integer ;
test : WideString;
begin
CDS_customer.Delete;
//CDS_customer.Post;
vDatas_CustomerInfo := CDS_customer.Delta;
uObj_CustomerInfo := ComtsUpdate_CustomerInfo.CreateRemote('ly2001038');
uObj_CustomerInfo.Updatas_CustomerInfo(vDatas_CustomerInfo,-1,iErrorCount) ;
showmessage(test);
end;
服务器端更新对象代码
procedure TmtsUpdate_CustomerInfo.Updatas_CustomerInfo(vDatas: OleVariant;
iMaxError: Integer;
var iErrorCount: Integer;
var vtest: WideString);
var
//Options: TGetRecordOptions;
iRecOut : Integer;
OwnerData : OleVariant;
Params : OleVariant;
begin
try
//FMyDM.CDS_CustomerInfo.Active := true;
//FMyDM.CDS_CustomerInfo.Delta := vDatas;
//FMyDM.CDS_CustomerInfo.ApplyUpdates(0) ;
FMyDM.DCOMC_CustomerInfo.AppServer.UpdateDatas(vDatas, iMaxError,iErrorCount ) ;
SetComplete ;
except
SetAbort ;
end;
end;
 
和你怎么联系?
我都快疯了!
 
我的服务器程序:
begin
try
(这句话不能正确执行)
DSP_F_customer_info.ApplyUpdates(vDtatas,iMaxErrors,iErrorCount);
SetComplete ;
except
SetAbort ;
end;
// try/except
end;
客户端:
CDS_customer.Delete;
vDatas_CustomerInfo := CDS_customer.Delta;
uObj_CustomerInfo := ComtsUpdate_CustomerInfo.CreateRemote('ly2001038');
uObj_CustomerInfo.Updatas_CustomerInfo(vDatas_CustomerInfo,0,iErrorCount) ;
现在在执行时也不出错,但也不能删除纪录
 
类型库中定义Updatas_CustomerInfo(vDatas: OleVariant;时不要定义成Variant
,要Variant*,假如还不行就定义成In,Out类型,应该就可以了
 
现在执行已经不出错!
但数据库里的数据也没有被更新!
为什么?
但我对另一个数据库表操作确实正确的!
 
后退
顶部