例如做进销存的“进货单”,“销售单”等,C#我知道可把数据库的内容通过DataApter.fill到DataSet中来进行离线操作,然后再一次性提交更改到数据库中。 但在Delphi7中,我只知道用AdoConnectin  AdoQuery 与 DataSource进行在线操作。 
但现在如果要用Delphi来实现“进货单”之类的,如何实现离线操作。 
我baidu有搜索了,但都说得不太明白,帮助文档是英文的又看不太清楚。 
有的说是用ClientDataSet,有的说用ADODataSet,到底该用哪个如何实现 
(请给一简单的段代码,包含如何把数据库的数据载入DataSet,然后如何修改并提交回数据库) 
谢谢! 

解决方案 »

  1.   

    数据集设置成批量更新,或使用clientdataset
      

  2.   


    //获取资料
    class function TWebServiceDB.ReadADOData(AData: Variant; var AdoQuery: TADOQuery): Boolean;
    var
      AR:_Recordset;
      AStream:_Stream;
      MS1:TMemoryStream;
      P:Pointer;
      s:string;
    begin
      Result := False;
      if VarIsNull(AData) then
      begin
        Exit;
      end;
      try
        s:='';
        MS1:=TMemoryStream.Create;
        try
          MS1.Size:=VarArrayHighBound(AData,1)+1;
          P:=VarArrayLock(AData);
          try
            Move(P^,MS1.Memory^,MS1.Size);
          finally
            VarArrayUnLock(AData);
          end;
          AData:=VarArrayCreate([0,MS1.Size-1],varByte);
          P:=VarArrayLock(AData);
          try
            Move(MS1.Memory^,P^,MS1.Size);
          finally
            VarArrayUnLock(AData);
          end;
        finally
          MS1.Free;
        end;
        AStream:=CoStream.Create;
        AStream.Open(EmptyParam,adModeUnknown,adOpenStreamUnspecified, '', '');
        AStream.Type_:=adTypeBinary;
        AStream.Write(AData);
     
        AR:=_Recordset(CoRecordset.Create);
        AStream.Position:=0;
        AR.Open(AStream,EmptyParam,adOpenUnspecified, adLockUnspecified, -1);
        AdoQuery.Recordset:=ADOInt._Recordset(AR);
      except
      end;
    end;
    class function TWebServiceDB.SaveADOData(AData: TADOQuery): Variant;
    var
      AStream:_Stream;
    begin
      try
        AData.CheckBrowseMode;
        AStream:=CoStream.Create;
        OLEVariant(AData.Recordset).Save(AStream,adPersistADTG);
        AStream.Position:=0;
        Result:=AStream.Read(AStream.Size);
      except
      end;
    end;参考这个代码
      

  3.   

    看不太明白,请问下ReadADOData函数读取后数据到底是放在哪里了?
    而SaveADOData(AData: TADOQuery): 参数AData: TADOQuery,那么说明要更新的内容不是在内存表中,而是在AData中了吗?
    我对Delphi数据操作这方面了解不多。谢谢!