大虾们,哪位知道如何通过com将服务其中的数组传递给客户端,清赐教,有例子最好

解决方案 »

  1.   

    这是从客户端传来数组然后处理后又传回客户端的,你试试:
    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;
      

  2.   

    楼上这个兄弟给的例子太好啦,显示的是如何在MIDAS中应用事务。
      

  3.   

    定义一个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;
      

  4.   

    请问在下面这句出错'Invalid data packet'
       dsMx.Reconcile(Re[1]);
      

  5.   

    WangPeter(Peter)说的可以实现的,这个方法我都用过很多次了
    楼主就用这个方法没错