help,help,help关于com中关于数组传递

zm12345 2003-12-26 10:10:57
大虾们,哪位知道如何通过com将服务其中的数组传递给客户端,清赐教,有例子最好
...全文
8 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bxh2dai 2004-01-03
WangPeter(Peter)说的可以实现的,这个方法我都用过很多次了
楼主就用这个方法没错
回复
WangPeter 2003-12-31
定义一个OleVariant变量,用VarArrayCreate创建一个数组,然后把这个变量作为参数传递就可以了.
如下,创建一个二维数据并赋值:
var
vArray: OleVariant;
begin
vArray:= VarArrayCreate([0, 1, 0, 2], varVariant);
vArray[0, 0] := 'aaa';
vArray[0, 1] := 1;
vArray[0, 2] := 'bbb';
vArray[1, 0] := 'ccc';
vArray[1, 1] := 2;
vArray[1, 2] := 'ddd';

end;
回复
yie28658340 2003-12-31
请问在下面这句出错'Invalid data packet'
dsMx.Reconcile(Re[1]);
回复
超人汪 2003-12-30
学习中,帮顶接分
回复
netwizard 2003-12-30
楼上这个兄弟给的例子太好啦,显示的是如何在MIDAS中应用事务。
回复
dragon432503 2003-12-27
这是从客户端传来数组然后处理后又传回客户端的,你试试:
function TVoiceSys.ApplyUpdateS(var Data: OleVariant; Provider: OleVariant;
ArrayLength: Integer): Integer;
Var
TmpPro:TDataSetProvider;
i:Word;
Pro:String ;
begin
cn.BeginTrans;
Try
for i:= 0 to ArrayLength-1 do
begin
TmpPro := TDataSetProvider(FindComponent(Provider[i]));
Pro:=TmpPro.Name;
if (TmpPro<>nil) and (not VarIsNull(Data[i])) then
begin
TmpPro.ApplyUpdates(Data[i],0,Result);
if Result>0 then
Abort;
end;
end;
Result := 0;
Cn.CommitTrans ;
Except
Cn.RollbackTrans;
end;
end;
客户端代码
procedure aSaveExecute(Sender: TObject);
var
ZbVar,MxVar:OleVariant;
ResultS:Integer;
Re:OleVariant;
begin
dsMx.CheckBrowseMode;
dsZb.CheckBrowseMode;
if dsZb.ChangeCount >0 then
ZbVar := dsZb.Delta
else
ZbVar := NULL;
if dsMx.ChangeCount >0 then
MxVar := dsMx.Delta
else
MxVar := NULL;
Re := VarArrayOf([ZbVar,MxVar]);
ResultS := dsZb.RemoteServer.AppServer.ApplyUpdateS(Re,VarArrayOf([dsZb.ProviderName,dsMx.ProviderName]),2);
if not VarIsNull(Re[1]) then
dsMx.Reconcile(Re[1])
else
if not VarIsNull(Re[0]) then
dsZb.Reconcile(Re[0])
else
begin
dsMx.Reconcile(Re[1]);
dsZb.Reconcile(Re[0]);
dsMx.Refresh;
dsZb.Refresh;
end;
end;
回复
发动态
发帖子
网络通信/分布式开发
创建于2007-08-02

1565

社区成员

Delphi 网络通信/分布式开发
申请成为版主
社区公告
暂无公告