有谁用过Delphi6指南中21章三层中更新单元的,第756页的
我用的是中层ADO,客户端用DCOM
客户端出错,客户端执行到下面出错
   procedure  reconciledeltas(const cdsarray:array of Tclientdataset;
               vdeltaarray:olevariant);
  var
    bReconcile:boolean;
    i:integer;
    lowCDS,HhighCDS:integer;
  begin
     lowcds :=low(cdsarray);
     highcds:=high(cdsarray);
     bReconcile := false;
     for i:= lowcds to highcds do
          if not varisnull(vDeltaarray[i]) then //出错提示'Invalid argument'
          begin
             cdsarray[i].reconcile(vDeltaarray[i]);
             bReconcile :=true;
             break;
          end;
          if not bReconcile then
             for i:=highcds downto lowcds do
             begin
                cdsarray[i].reconcile(vdeltaarray[i]);
                cdsarray[i].refresh;
             end;
 end;
  end;

解决方案 »

  1.   

    'Invalid argument'的意思是:
    数组下标越界,vDeltaarray的元素个数和cdsarray的元素个数不一样.
      

  2.   


       procedure  reconciledeltas(const cdsarray:array of Tclientdataset;
                   vdeltaarray:olevariant);
      var
        bReconcile:boolean;
        i:integer;
        lowCDS,HhighCDS:integer;
      begin
         lowcds :=low(cdsarray);
         highcds:=high(cdsarray);
         bReconcile := false;
         for i:= lowcds to highcds do
              if not varisnull(vDeltaarray[i]) then //出错提示'Invalid argument'
              begin
                 cdsarray[i].reconcile(vDeltaarray[i]);
    //出现Invalid data packet
                 bReconcile :=true;
                 break;
              end;
              if not bReconcile then
                 for i:=highcds downto lowcds do
                 begin
                    cdsarray[i].reconcile(vdeltaarray[i]);
                    cdsarray[i].refresh;
                 end;
     end;
      end;