我用adoquery建立了两个单独的数据源,它们有一个字段相同,但如何实现主从关系呢?

解决方案 »

  1.   

    把他们通过一个datasource连起来设置连从表的adoqery的datasource属性为,连着主表的datasource。然后写sql时用到主表的东东时,前面加个“:”就行了。
      

  2.   

    adoquery对应主表
    adodataset对应子表
    adodataset的masterfields属性设置
      

  3.   

    补充
    adodataset的datasource属性选择联接adoquery的datasource
      

  4.   

    将从表的matersource对应主表的datasource,然后击从表的masterfield选择要关联的主从表字段即可。
      

  5.   

    楼主可能是没做过这方面的东西吧,先补补基础知识,从《DELPHI基础教程》中粘贴一段14.3 创建主要──明细数据库应用         我们前面在介绍的基于单个数据库表的数据库应用程序只能对数据库表进行简单的管理,大多数只用来浏览单个数据库表中的记录信息,如果我们想浏览多个相关的数据库表中的记录信息,就必须要创建主要──明细型数据库应用程序。        在主要──明细型数据库应用程序中,一个数据库表作为主要表,其中存放着综合信息,其他的数据库表和主要数据库表相关联,它们当中存放着更详细的信息。例如,当数据库表Customer.DB作为主表,它包含着客户的综合信息如编号、姓名、 所在公司的名称等等。而数据库表Orders.DB中包含着每个客户的订货单的详细信息,如订单号、 发货日期、起运日期、发货目的地等信息,这样当在Customer.DB表中查看某一位客户时, 利用其中的字段CustNo与Orders.DB表发生联系,自动地从Orders.DB表中检索出这位客户曾经发来的所有订货单的详细信息。主要──明细型数据库体现了关系数据库的特点,即独立的数据库表之间基于它们共同的字段而发生联系。在这里Customer.DB和Orders.DB拥有一个共同的字段CustNo。14.3.1 一对多关系的主要──明细型数据库应用程序         主要和明细数据库表之间存在一对多的关系,意思是说对于主表中的一条记录,在明细表中有多条记录与之对应。例如,创建一个主要──明细型数据库应用程序,其包括两个表Customer.DB和Orders.DB,它们分别作为主表和明细表,创建好的应用如图14.5所示,窗体中各部件的属性设置  表14.2 主要──明细型数据库应用中各部件的属性━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━部 件 属 性 属 性 值 注 释 ──────────────────────────────────Table1 Active True (主表) DatabaseName DBDEMOS TableName CUSTOMER.DB ──────────────────────────────────DataSource1 DataSet Table1 AutoEdit False ──────────────────────────────────Table2 Active True (明细表) DatabaseName DBDEMOS TableName ORDERS.DB IndexFieldNames CUSTNO 指定字段CUSTNO作为Table2中的索引字段MasterField CUSTNO 指定与主表发生联系的字段MasterSource DataSource1 说明与主表相连接的数据源即DataSource──────────────────────────────────DataSource2 DataSet Table2 AutoEdit False ──────────────────────────────────DBGrid1 DataSource DataSource1 (对应主表) ──────────────────────────────────DBGrid2 DataSource DataSource2 (对应明细表) TableName ORDERS.DB ──────────────────────────────────DBNavigator1 DataSource DataSource1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━         一对多关系是非常普遍的关系。即便是简单的名字/ 地址数据库都有一对多的关系,因为一个人可能不止一个地址:家庭地址、工作地址、还可能有别墅地址。在本例中,公司的一个客户常常有多个订货单,当我们单击DBNavigator1中的向前、向后按钮时,会移动DBGrid1中的记录指针,而在DBGrid2中会自动显示与DBGridl 中当前记录相关的多条记录,即显示一个客户的信息时,同时会显示该客户的所有订货单的详细信息。 14.3.2 一对多──多关系的数据库应用         前面我们介绍了基于两个表的一对多关系的应用,下面我们介绍怎样创建一个从三个表中浏览数据记录的一对多关系的应用。         例如:一个客户也许有多张订货单,而每一张订货单中有多个订货项目,这样我们在Customer.DB表和Orders.DB表之间建立一个主要──明细型关系,同时在orders.DB 表和Items.DB表之间建立一个主要──明细型关系。 窗体中各部件的属性如表14.3所示 表14.3 一对多──多关系的应用中各部件的属性━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━部 件 属 性 属 性 值 注 释 ──────────────────────────────────Active True Table1 DatabaseName DBDEMOS TableName CUSTOMER.DB ──────────────────────────────────DataSource1 DataSet Table1 AutoEdit False ──────────────────────────────────Active True DatabaseName DBDEMOS Table2 TableName ORDERS.DB IndexFieldNames CUSTNO MasterField CUSTNO MasterSource DataSource1 ──────────────────────────────────DataSource2 DataSet Table2 AutoEdit False ──────────────────────────────────Active True DatabaseName DBDEMOS Table3 TableName ORDERS.DB IndexFieldNames ORDERNO MasterField ORDERNO MasterSource DataSource2 ──────────────────────────────────DataSource3 DataSet Table3 AutoEdit False ──────────────────────────────────DBGrid1 DataSource DataSource3 ──────────────────────────────────DBNavigator1 DataSource DataSource1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━         窗体中其余的部件都是TDBEdit和TLabel部件,它们用于显示Customer.DB中的字段值和Order.DB中的字段值。在该例子中,总共连接了三个表, Customer. DB 表是主要表,Orders.DB表在窗体中起到了双重作用,它既是Customer.Db表的明细表,同时又是Items.DB表的主要表,Items.DB表是Orders.DB表的明细表。 
      

  6.   

    要注意的是TTable,TAdoTable通过mastersource和masterfield实现主从表关联,象上面说的那样。而TQuery,TAdoquery是通过Datasource,然后在sql中写语句实现的。如:
    Select * From tabletest Where id = :ID //后面这个ID就是主表中的ID