用DBGrid的话,你就知道TDataSource有什么用了。
你能直接把DBGrid和TDataSet绑定连接么?

解决方案 »

  1.   


    它是接通DataSet与数据感应控件的桥梁~~~~~
    你可以假设没有DataSource的情况~~~~~~~~~~~~~~~~~~~
      

  2.   

    我觉得这个并不是没有用处的,
    因为你其它是不知道TDataSource内部作了些什么,从TDataSet里继承下面的提供数据的类是很多的,
    它们最后输出的数据格式可能已经发生了变化,这时候如果要在第一个使用数据源的类作处理,如TDbgrid、Tdbedit....
    那不好,用一个中间的TDataSource可以统一一种格式,这样的话,就很方便,
    也许我们觉得它很浪费,也没有用,但其内部完成的功能确是我们不知道了。
      

  3.   

    Delphi帮助中关于TDataSource的描述,它不仅联系DataSet与数据感应控件之间的联系,而且在Master/Detail表中提供两个DataSet之间的联系.
    TDataSource provides an interface between a dataset component and data-aware controls on a form.Description
    Use TDataSource to 
    provide a conduit between a dataset and data-aware controls on a form that enable display, navigation, and editing of the data underlying the dataset.
    Link two datasets in a master/detail relationship.All datasets must be associated with a data source component if their data is to be displayed and manipulated in data-aware controls. Similarly, each data-aware control needs to be associated with a data source component in order for the control to receive and manipulate data.Data source components also link datasets in master-detail relationships.
      

  4.   

    我觉得这个并不是没有用处的,
    因为你其它是不知道TDataSource内部作了些什么,从TDataSet里继承下面的提供数据的类是很多的,
    它们最后输出的数据格式可能已经发生了变化,这时候如果要在第一个使用数据源的类作处理,如TDbgrid、Tdbedit....
    那不好,用一个中间的TDataSource可以统一一种格式,这样的话,就很方便,
    也许我们觉得它很浪费,也没有用,但其内部完成的功能确是我们不知道了。
      

  5.   

    1.在TDataSource中提供了DataEvent方法,这个方法的作用是当TDataSource所对应的数据集中的数据发生变化时,它会根据FDataLinks列表通知所有用到该数据集的数据敏感控件。而维护FDataLinks数据列表的方法是
    AddDataLink。
    2.每当改变一个数据敏感控件的DataSource属性时,就会触发相应DataSource中的方法AddDataLink,往DataSource.FDataLinks中加上这个数据敏感控件,这样当数据集的数据发生变化时就会通知它。
     不知道我这样说,各位大侠能否听明白。
      

  6.   

    1.在TdataSource中有一个方法DataEvent,它的作用是当数据集的数据发生变化时,通知所有用到该数据集的数据敏感控件,而记录用到该数据集的数据敏感控件的变量为FDataLinks,由方法AddDataLink进行维护。
    2.当数据敏感控件的DataSource变化时,就会触发相应DataSource的方法AddDataLink,将该数据敏感控件注册到DataSource中,这样当数据集的数据变化时,就会通知这个数据敏感控件。
     不知道我这样说,各位大侠是否听明白了
      

  7.   

    1.在TdataSource中有一个方法DataEvent,它的作用是当数据集的数据发生变化时,通知所有用到该数据集的数据敏感控件,而记录用到该数据集的数据敏感控件的变量为FDataLinks,由方法AddDataLink进行维护。
    2.当数据敏感控件的DataSource变化时,就会触发相应DataSource的方法AddDataLink,将该数据敏感控件注册到DataSource中,这样当数据集的数据变化时,就会通知这个数据敏感控件。
     不知道我这样说,各位大侠是否听明白了
      

  8.   

    DataSource 和 DataSet是1:1的对应关系,而且TDataSource里很少有可利用的属性,这些属性完全可以被TDataSet所吸收,即使FDataLinks也如此。至于Master/Detail也完全可以直接使用DataSet属性,而不使用DataSource,完成主从关系的连接。可视数据库组件也没有必要留存DataSource这个Publish属性,只要把DataSet属性publish出来即可。设置多个可视数据库组件的DataSource就可以改由直接设置其DataSet属性了。
      

  9.   

    但是TdataSource和数据敏感控件的关系是一对多的关系,在这里TdataSource起个路由的作用,这样可以只改变DataSource和DataSet之间的关系,就可以让数据敏感控件显示不同数据集的数据
      

  10.   

    但是TdataSource和数据敏感控件的关系是一对多的关系,在这里TdataSource
    起个路由的作用,这样可以只改变DataSource和DataSet之间的关系,就可以
    让数据敏感控件显示不同数据集的数据
      

  11.   

    有TdataSource可以存放从服务器取到客户端数据,作为显示数据的数据源,
    也可以保存TTable,Tquery做过一些数据过滤,查询后的结果.
    比如说 tquery:tdatasourse 可为1:多
    不同时候的查询结果,用不同的tdatasourse保存.可作为显示控件显示.
      

  12.   

    "但是TdataSource和数据敏感控件的关系是一对多的关系,在这里TdataSource  
    起个路由的作用,这样可以只改变DataSource和DataSet之间的关系,就可以  
    让数据敏感控件显示不同数据集的数据"to dtqyhq(鸿浪):
      你讲到的这一点可能正是TDataSource存在的唯一理由.
    但是如果直接设置数据可视组件的DataSet属性也可以,只是比较烦琐一些。
    况且,这种方式一般用在数据比较通用的情况下,通常很少出现把可视组件的DataSet换来换取。大家可能遇到过这样的情况,在一个DataModule上放置了好多DataSet组件,同时可能还要放置同等数量的DataSource组件。累呀不累?
      

  13.   

    从面向对象的角度看,他隔离了数据和显示,使显示的模块可以成为独立的模块,有点像view/doc,doctemplate
      

  14.   

    doctemplate = datamodule
    doc         = dataset
    view        = dbgrid,dbedit...datasource起什么作用?
      

  15.   

    楼主问题的关键还是在于DataSource与DataSet的一一对应关系。但DataSet分成多种形式存在,如Table, Query, AdoQuery
    DataSource中有它们之间的共同特性,从这点角度看,它还是有存在的必要。
      

  16.   

    以后DataSet的类型会越来越多,是不是给每种DataSet都加上DataSource的所有代码?还是留着好。
      

  17.   

    就像TSession,你说有用没有?
      

  18.   

    同意johnsonrao(johnson)的观点,至少可以当作共用代码段。
      

  19.   

    我说的是将TDataSource的功能全部由TDataSet这个数据集的基本类来实现,这样不论是TQuery,TTable还是TADOTable,或TClientDataSet等都将拥有直接与DBGRid等可视数据组件相连接的特性。其实TDataSource只有FDataLinks这个比较有用的TList属性,如果仅仅是为了节省共享这部分代码,可能不是充足的理由。不知TDataSource还有什么特别的作用??
      

  20.   

    to manboo:能否详细说明一下“数据隔离”?
      

  21.   

    TDataSource 相当于一个通用的接口,在 Delphi 的很多控件中都使用它,也就是说它起桥梁的作用。还有这样做的好处就是扩展性好,如果直接对 TDataSet 绑定,看似比较直接,但问题就是出在太直接,太直接就缺少灵活。其存在的编程思想就是通过 TDataSource 作为对外的统一接口,开放且灵活,即使你不使用 TDataSet 继承,只要你返回的数据集具有相同方法即可挂在 TDataSource 上,其道理有点象 COM 接口。
      

  22.   

    TDataSource在我看来也是没有多大作用,它的一些属性方法完全可以加到TDataSet中去,另外我觉这样可能还更能提高程序的简洁性。
      

  23.   

    我很久以前也有这样的困惑,但用多了就觉得比较方便.
    我感觉楼主的看法有道理,但没有tdadasource可能就会感到不方便
      

  24.   

    我很久以前也有这样的困惑,但用多了就觉得比较方便.
    我感觉楼主的看法有道理,但没有tdadasource可能就会感到不方便
      

  25.   

    谁说没有用处。比如我想使用对象来描述数据。但是要使用dbgrid来显示。我就可以从Tdataset继承。重载相应的函数就可以通过tdatasource到dbgrid显示.没有的话,你想象看~~~`
      

  26.   

    没有结果,结帐!http://forum.vclxx.org/topic.asp?TOPIC_ID=18920&FORUM_ID=4&CAT_ID=2&Topic_Title=TDataSource%A6%B3%A6%F3%A5%CE%B3%7E%3F%A7%DA%AFu%AA%BA%B7d%A4%A3%C0%B4%2E&Forum_Title=VCL
      

  27.   

    TMD,结了几次,均不成功!
    可恶,明天再试试!