有看到这么设置的,显示数据库中数据一个TADOQuery,名称为ADOQuery1,用于连接数据库,一个TDataSetProvider,名称为DataSetProvider1,其DataSet设置为ADOQuery1,一个TClientDataSet,名称为ClientDataSet1,其ProviderName设置为DataSetProvider1,一个TDataSource,名称为DataSource1,其DataSet设置为ClientDataSet1,一个TDBGrid,名称为DBGrid,其DataSource为DataSource1;查询数据的SQL放在ADOQuery1的SQL中,例:ADOQuery1.SQL.Add('你的SQL语句');只用adoquery1 datasource1 dbgrid1不就可以了么为什么要搞那么复杂,第一种方法应该有存在哪些优势吧????
TDataSetProvider   
TClientDataSet
什么情况下使用 有什么好处?????

解决方案 »

  1.   

    主要用在三层模式下
    TDataSetProvider放在中间层,TClientDataSet放在客户端
      

  2.   

    不太清楚了,中间层使用Delphi很恶心
      

  3.   

    因为想使用TClientDataSet,是对DataSet的扩展,功能比较多。
      

  4.   

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

  5.   

    三层的应用吧.大型的ERP CRM系统。。 基本都这样应用的..
    DataSetProvider,ClientDataSet