我想在客户端直接应用ClientDataSet用什么才能给ClientDataSet 取得数据集

解决方案 »

  1.   

    ClientDataSet.data := dspProvider.data
      

  2.   

    DataSetProvider1.dataset := query1;
    ClientDataSet.data := DataSetProvider1.data;
      

  3.   

    楼主对TClientDataSet的用法可能没有抓住最核心的地方。
    TClientDataSet可用于一层,二层和三层,一层就是保存文件,有时候也有运用。三层不说。
    而两层的实质是在数据集之间加了一个中间层,就是数据集提供者。你看它的名字TDataSetProvider,说明其既和TDataSet打交道,又身兼提供者的重担。
    当数据集组件连接数据库后,它不是直接和TDataSource组件相连,而是连接TDataSetProvider。那么作为与TDataSource组件相连的TClientDataSet就必须得到数据,从哪儿来?就从TDataSetProvider来。
    你可能问,为什么这样做?为了实现数据缓冲,或者从表面上讲,为了实现多条记录一并更新,否则,你每次都操作在数据集上,而数据集又每次都把结果反映到数据库里,这样怎么实现缓冲的数据集的好处呢?
    最后一个图:
    TDataGrid-->TDataSource-->TClientDataSet-->TDataSetProvider-->TDataSet(-->可能还有数据连接组件)
      

  4.   

    补充,在设计时,你可以这样使用TClientDataSet:
    ...
    DataSetProvider1.dataset := query1;
    ClientDataSet1.ProviderName:= DataSetProvider1;
    ...