COM+开发难题? ( 积分: 50 )

  • 主题发起人 主题发起人 ouyang2003
  • 开始时间 开始时间
O

ouyang2003

Unregistered / Unconfirmed
GUEST, unregistred user!
用协调对象来更新数据不行,我在协调对象写了这样一个方法
procedure TmtsSecurityObj.UpdateBlockSeat(vDatas: OleVariant;
iMaxError,
iErrorCount: Integer);
var
BlockSeatObj:ImtsBlockSeatObj;
asp:IAppServer;
//iRecount:integer;
OwnerData:olevariant;
//Deltas:OleVariant;
begin
try
oleCheck(ObjectContext.CreateInstance(CLASS_MTSBlockSeatObj,IID_ImtsBlockSeatObj,BlockSeatObj));
asp:=BlockSeatObj as IAppServer;
asp.AS_ApplyUpdates(asp.AS_GetProviderNames,vDatas,iMaxError,iErrorCount,OwnerData);
showmessage('How are you !');
SetComplete;
except
SetAbort;
end;

end;
 
用协调对象来更新数据不行,我在协调对象写了这样一个方法
procedure TmtsSecurityObj.UpdateBlockSeat(vDatas: OleVariant;
iMaxError,
iErrorCount: Integer);
var
BlockSeatObj:ImtsBlockSeatObj;
asp:IAppServer;
//iRecount:integer;
OwnerData:olevariant;
//Deltas:OleVariant;
begin
try
oleCheck(ObjectContext.CreateInstance(CLASS_MTSBlockSeatObj,IID_ImtsBlockSeatObj,BlockSeatObj));
asp:=BlockSeatObj as IAppServer;
asp.AS_ApplyUpdates(asp.AS_GetProviderNames,vDatas,iMaxError,iErrorCount,OwnerData);
showmessage('How are you !');
SetComplete;
except
SetAbort;
end;

end;
 
怎么没有人回答啊?急用啊!
 
问问题的方法有缺陷
什么叫不行?编译不通过,还是执行错误?
什么错误?
我粗看
asp.AS_ApplyUpdates(asp.AS_GetProviderNames,vDatas,iMaxError,iErrorCount,OwnerData);
可能根本就编译不通过
AS_ApplyUpdates的第一个参数是provider的name,而不是providers
另外,vDatas必须是Clientdataset.delta,而不能是data(当然,我不知道你用的是什么)
 
COM+好像已经差不多过时了?!
 
to 张鸿林
是不能更新到数据,
procedure TmtsSecurityObj.UpdateBlockSeat(vDatas: OleVariant;
iMaxError,
iErrorCount: Integer);
var
BlockSeatObj:ImtsBlockSeatObj;
asp:IAppServer;
//iRecount:integer;
OwnerData:olevariant;
//Deltas:OleVariant;
begin
try
oleCheck(ObjectContext.CreateInstance(CLASS_MTSBlockSeatObj,IID_ImtsBlockSeatObj,BlockSeatObj));
asp:=BlockSeatObj as IAppServer;
asp.AS_ApplyUpdates(asp.AS_GetProviderNames,vDatas,iMaxError,iErrorCount,OwnerData);
showmessage('How are you !');
SetComplete;
except
SetAbort;
end;

end;

这个是我在COM+里写的一个过程
在客户端我是这样调用的:
LoginObj.UpdateBlockSeat(ClientDataSet1.Delta,0,0);
这样有什么问题不能更新到数据呢?急!!!
 
已经告诉你了,下列语句
asp.AS_ApplyUpdates(asp.AS_GetProviderNames,vDatas,iMaxError,iErrorCount,OwnerData);
第一个参数错误
 
to 张鸿林
但是我把asp.AS_GetProviderNames换成Provider Name也更新不到数据啊??
asp.AS_ApplyUpdates('UpdateData',vDatas,iMaxError,iErrorCount,OwnerData);
可以给个你的例子吗??
 
to 张鸿林
给个QQ:让我请教你一下!
我的QQ:44790748
 
procedure TmtsSecurityObj.UpdateBlockSeat(vDatas: OleVariant;
iMaxError,
iErrorCount: Integer);
应该这样声明:
procedure TmtsSecurityObj.UpdateBlockSeat(vDatas: OleVariant;
iMaxError:integer;
var iErrorCount: Integer);
客户调用后要检查iErrorCount,看看是否有错误发生
在TProvider.OnUpdateError可以捕捉到错误
 
有两个错误
1.procedure TmtsSecurityObj.UpdateBlockSeat(vDatas: OleVariant;
iMaxError,
iErrorCount: Integer);
应该这样
procedure TmtsSecurityObj.UpdateBlockSeat(vDatas: OleVariant;
iMaxError:integer;out iErrorCount: Integer);
2.asp.AS_ApplyUpdates(asp.AS_GetProviderNames,vDatas,iMaxError,iErrorCount,OwnerData);
showmessage('How are you !');
SetComplete;
except
SetAbort;
如果直接调用asp.AS_ApplyUpdates这个方法里面既没有执行SetComplete;
也没有执行SetAbort;也就是下层的MTS对象根本没有向本层的MTS对象提交事务状态,那你本层怎么能执行SetComplete;或SetAbort;呢?除非你设置了MTS数据模块的AutoComplete属性,不过好像设置了也没有用.
所以你要在MTS数据模块中定义自己的方法去更新数据如:
procedure MTSDBObj.UpdateBlockSeat(vDatas: OleVariant;
iMaxError:integer;out iErrorCount: Integer);
begin
try
Provider1.ApplyUpdates(vDatas,iMaxError,iErrorCount);
SetComplete;
except
SetAbort;

end;
end;
然后协调对象再调用这个方法更新数据,写的匆忙可能编译不过,你自己改下


 
to :killyAll2004
我照你写的那里做了但是会出现错误
我是这样写的:
在协调对象调用:
procedure TmtsSecurityObj.UpdateBlockSeat(vDatas: OleVariant;
iMaxError: Integer;
var iErrorCount: Integer);
var
BlockSeatObj:ImtsBlockSeatObj;
begin
BlockSeatObj.UpdateBlockSeat(vDatas,iMaxError,iErrorCount);

end;
 
报什么错?能具体说说吗?
 
to :killyAll2004
报:向占位程序传送了空的索引指针
 
后退
顶部