不会用clientdataset,在网上搜了好几天也没找到,求哪位好心的大侠给我一个demo好吗?不管要多少分都行,不够可以再加,谢谢!
我的信箱是: zzy9903#163.com

解决方案 »

  1.   

    TClientDataSet,TDataSetProvider,TADODataSet;
    1、TClientDataSet 的ProviderName属性选择TDataSetProvider;TDataSetProvider的DataSet属性选择TAdoDataSet
    2、写一个通用的GetDataSet,与UpdateDataSet的函数
    function TDBAccessADO.GetDataSet(SQLCommand:string;DataSet:TClientDataSet):
            Integer;
    begin
      try
        adoconnection1.Connected:=false;
        adoconnection1.Connected:=true;
        clientdataset1.Active:=false;
        clientdataset1.CommandText:=SQLCommand;
        clientdataset1.Active:=true;
        DataSet.Data:=ClientDataSet1.Data;
        clientdataset1.Active:=false;
        result:=S_OK;
      except
        result:=S_False;
      end;
    end;
    function TDBAccessADO.UpdateDataSet(SQLCommand:string;TableName:String;
            DataSet:TClientDataSet;NotUpField:Array of string): Integer;
    var
      ErrorCount:integer;
      int1,int2:integer;
    begin
      if DataSet=nil then
      begin
        result:=S_False;
        exit;
      end;
      if DataSet.ChangeCount=0 then
      begin
        result:=0;
        exit;
      end;
      try
        adoconnection1.Connected:=false;
        adoconnection1.Connected:=true;
      except
        result:=S_False;
        exit;
      end;  //FNotUpdateField
      int1:=length(NotUpField);
      if int1<>0 then
      begin
        setlength(FNotUpDateField,int1);
        int2:=0;
        for int1:=low(NotUpField) to high(notUpField) do
        begin
          FNotUpdateField[int2]:=NotUpField[int1];
          inc(int2);
        end;
      end;  try
        adodataset1.CommandText:=SQLCommand;
        clientDataset1.Data:=dataset.Delta;
        DataSetProvider1.ApplyUpdates(clientdataset1.Data,0,errorcount);
        if errorcount=0 then
          dataset.MergeChangeLog;
        result:=errorcount;
      except
        result:=S_False;
      end;
    end;
      

  2.   

    月亮,我的是主从表,adodataset中要不要设置mastersource属性呢?还是在clientdataset中设置呢??
      

  3.   

    adodataset不需要你来控制,所有的操作都在你的clientdataset上
      

  4.   

    不好意思,我比较笨,没作出来,这里的SqlCommond应该怎么写呢?我用的不是ado数据库,我用的是SDAC,没有dataset,用query和tbl都不行,对clientdataset的commandtext属性赋值,open的时候就出错,能不能不用通用的函数?
      

  5.   

    SQLCommand为查询的sql语句,//getdataset('select * from Table1',ClientDataset);
      

  6.   

    好像不关sdac的事吧,我不明白像getdataset这么简单的事直接用cds_master.open不行吗?为什么要用clienddataset打开再赋值data给cds_master呢?clientdataset1的属性是怎么设置的呢?
      

  7.   

    你需要设置这个clientdataset1的providerName 指定到你的DataProvider
      

  8.   

    〉〉1、TClientDataSet 的ProviderName属性选择TDataSetProvider;TDataSetProvider的DataSet属性选择TAdoDataSet
    〉〉2、写一个通用的GetDataSet,与UpdateDataSet的函数我是把他们放到一个data module中静态配置好getdataset 是把这部分工作提取出来,封装的一个函数
      

  9.   

    那么 FNotUpdateField 是作什么用的呢?它在那里申明?
      

  10.   

    还有TableName参数好像也没有用到哦?
      

  11.   

    FNotUpdateField: array of string;
    不更新的字段,如果全部更新你输入[]就可以了
      

  12.   

    没有用到的,你删除了就可以了,或者传入一个''你就把上边的看作一个demo,
      

  13.   

    function TFrmSaleship.GetDataSet(SQLCommand:string;DataSet:TClientDataSet):Boolean;
    begin
      try
        dsp_tmp.DataSet := dm.qry_tmp;
        cds_tmp.Active := False;
        cds_tmp.CommandText := SQLCommand;
        cds_tmp.Open;
        DataSet.Data := cds_tmp.Data;
        cds_tmp.Active := False;
        dsp_tmp.DataSet := nil;
        Result := True;
      except
        Result := False;
      end;
    end;按照你说的作了,但是没反应,clientdataset里面是空的,没数据.
      

  14.   

    procedure TFrmSaleship.FormCreate(Sender: TObject);
    begin
      //tbl_saleshiph.Open;
      //tbl_saleshipd.Open;
      qry_saleshiph.Open;
      qry_saleshipd.Open;
      cds_saleshiph.Open;
      cds_saleshipd.Open;
      //ds_saleshiph.DataSet.Append;
      GetDataSet('select * from TSaleShipH',cds_saleshiph);
      GetDataSet('select * from TSaleShipD',cds_saleshipd);
      
    end;这样调用的
      

  15.   

    adoconnection
    adodataset
    clientdataset
    dataprovider
    datasource
    dbgridadoconnection连接数据库
    adodataset连接adoconnection后commadntext选择一个table然后active设置为true
    dataprovider的dataset属性选择adodataset
    clientdataset的providername选择dataprovider然后active设置为true
    datasource的dataset属性选择clientdataset
    datagrid的datasource属性选择datasource
      

  16.   

    哦哦,我的大概也就是这样设置的,晚上我回家用再ado试试
      

  17.   

    我的数据库里明明有数据,可是clientdataset打开后为什么是空的呢??