不知道楼主是不是这个意思: 查询语句 Select * from CP,KuCun where KuCun.CPID=CP.ID 这样关联查询两个表, 简单。
主/细表通常在编写数据库应用程序时,会遇到数据分散在多个彼此相关的数据库表中的情况。较为典型的例子是客户表(Customer)和订单表(Order)。其中,对应于每一个客户,在Customer表中都有一个记录,而对于每一项订单,在Order表中也有一个对应的记录。因为每一个订单都来自特定的客户,这样,就在两个数据库表之间形成了一种自然的关系。这是一种一对多的关系,因为一个客户可能有多个订单(这时,Customer是主表,Order是细表)。在Delphi中,可以方便地建立数据库表之间的主细关系。事实上,在设计期间就可以通过ObjectInspector确立这种关系。因此,有时甚至不需要编写任何的代码。假设有一个新项目,其中有两组数 据库组件,每一组中包含一个TTable组件(Table1/Table2)、一个TDataSource组件(DataSource1/DataSource2)和TDBGrid组件(DBGrid1/DBGrid2)。DBGrid1与Table1之间通过DataSource1建立关联,DBGrid2与Table2之间通过DataSource2关联。两个TTalbe组件的DatabaseName属性设为DBDEMOS,把Table1的TableName属性设为CUSTOMER.DB,把Table2的TableName属性设为ORDERS.DB。此时,这个窗体包含了两个不相关的数据库表。接下来要做的就是在这两个表之间实现关联,这需要用到细表的MasterSource 属性和MasterFields属性。在本项目中,把Table2的MasterSource属性设为DataSource1。当试图编辑MasterFields属性时,会出现一个Field Link Designer对话框,在此对话框中,需要指定通过哪些字段来把两个数据库表连接起来,在这里使用表示客户编号的CustNo字段。因为CustNo字段并非ORDERS表的主索引的组成部分,所以要用到包含CustNo字段的副索引。为此,就要在Field LinkDesigner对话框的Available Indexes框内选择CustNo字段。在选择了CustNo索引后,就可以从DetailFields和Master Fields框内选择CustNo字段,然后单击A d d按钮创建两个数据库表之间的链接。最后,单击O K按钮就完成了主/细表的关联。现在,如果对Table1进行浏览时,Table2所显示的数据仅限于特定的记录,这些记录的CustNo字段的值必须与Table1当前记录的CustNo字段的值相同。呵呵,这段我在CSDN上贴过N次了,都快背下来了!楼主以后先搜一搜,有很多问题都有答案的:-)
我想知道用query组成的主、从表。而不是Table
主表(Query1):select * from master 加DataSource1所dataset属性设为Query1 从表(Query2):select * from detail where zbxh=:xh(xh为master中的一个字段) 把Query2的MasterDataSource设为DataSource1 加 DataSource2把其DataSet属性设为Query2 这样加上DBGrid或者DBEdit就可以成为主从表了。
对了上面的Query(或ADOQuery)的Connection属性都是你加的那个ADOConnection. 主从表成了后就可以写新增: ...NewBtnClick(sender :TObject);//新增 begin Query1.insert; Query2.insert;//其它附加代码都可以加上 end; ...EditBtnClick(sender :TObject);//编辑 begin Query1.insert; Query2.insert;//其它附加代码都可以加上 end; ...PostBtnClick(sender :TObject); begin Query1.Post;(若是缓存就写Query1.ApplyUpdate(0); Query2.Post;//其它附加代码都可以加上 end; ...DeleteBtnClick(sender :TObject); begin Query2.First; while not Query2.EOF do Query2.delete;(若是缓存就写Query1.ApplyUpdate(0); Query1.delete;//其它附加代码都可以加上 end;
2.使用事物处理进行编辑修改
主表:select * from master
從表:select * from detail where zbxh=:xh
adoquery连两张表,然后你自己在程序控制操作就行了不知道你要实现什么样的功能
产品表(zbxh,khbh,cpbh,cp_name):从表
xh,khbh,kh_name zbxh khbh cpbh cp_name
1 001 联想 1 001 电脑1 联想电脑1
1 001 电脑2 联想电脑2
以上一个客户对应两个产品,就是一对多,
我想用adoquery来实现这样的主从,所以
查询语句 Select * from CP,KuCun where KuCun.CPID=CP.ID
这样关联查询两个表, 简单。
据库组件,每一组中包含一个TTable组件(Table1/Table2)、一个TDataSource组件(DataSource1/DataSource2)和TDBGrid组件(DBGrid1/DBGrid2)。DBGrid1与Table1之间通过DataSource1建立关联,DBGrid2与Table2之间通过DataSource2关联。两个TTalbe组件的DatabaseName属性设为DBDEMOS,把Table1的TableName属性设为CUSTOMER.DB,把Table2的TableName属性设为ORDERS.DB。此时,这个窗体包含了两个不相关的数据库表。接下来要做的就是在这两个表之间实现关联,这需要用到细表的MasterSource 属性和MasterFields属性。在本项目中,把Table2的MasterSource属性设为DataSource1。当试图编辑MasterFields属性时,会出现一个Field Link Designer对话框,在此对话框中,需要指定通过哪些字段来把两个数据库表连接起来,在这里使用表示客户编号的CustNo字段。因为CustNo字段并非ORDERS表的主索引的组成部分,所以要用到包含CustNo字段的副索引。为此,就要在Field LinkDesigner对话框的Available Indexes框内选择CustNo字段。在选择了CustNo索引后,就可以从DetailFields和Master Fields框内选择CustNo字段,然后单击A d d按钮创建两个数据库表之间的链接。最后,单击O K按钮就完成了主/细表的关联。现在,如果对Table1进行浏览时,Table2所显示的数据仅限于特定的记录,这些记录的CustNo字段的值必须与Table1当前记录的CustNo字段的值相同。呵呵,这段我在CSDN上贴过N次了,都快背下来了!楼主以后先搜一搜,有很多问题都有答案的:-)
加DataSource1所dataset属性设为Query1
从表(Query2):select * from detail where zbxh=:xh(xh为master中的一个字段)
把Query2的MasterDataSource设为DataSource1
加 DataSource2把其DataSet属性设为Query2
这样加上DBGrid或者DBEdit就可以成为主从表了。
主从表成了后就可以写新增:
...NewBtnClick(sender :TObject);//新增
begin
Query1.insert;
Query2.insert;//其它附加代码都可以加上
end;
...EditBtnClick(sender :TObject);//编辑
begin
Query1.insert;
Query2.insert;//其它附加代码都可以加上
end;
...PostBtnClick(sender :TObject);
begin
Query1.Post;(若是缓存就写Query1.ApplyUpdate(0);
Query2.Post;//其它附加代码都可以加上
end;
...DeleteBtnClick(sender :TObject);
begin
Query2.First;
while not Query2.EOF do
Query2.delete;(若是缓存就写Query1.ApplyUpdate(0);
Query1.delete;//其它附加代码都可以加上
end;
2.使用事物处理进行编辑修改
通常在编写数据库应用程序时,会遇到数据分散在多个彼此相关的数据库表中的情况。较为典型的例子是客户表(Customer)和订单表(Order)。其中,对应于每一个客户,在Customer表中都有一个记录,而对于每一项订单,在Order表中也有一个对应的记录。因为每一个订单都来自特定的客户,这样,就在两个数据库表之间形成了一种自然的关系。这是一种一对多的关系,因为一个客户可能有多个订单(这时,Customer是主表,Order是细表)。在Delphi中,可以方便地建立数据库表之间的主细关系。事实上,在设计期间就可以通过ObjectInspector确立这种关系。因此,有时甚至不需要编写任何的代码。假设有一个新项目,其中有两组数
据库组件,每一组中包含一个TTable组件(Table1/Table2)、一个TDataSource组件(DataSource1/DataSource2)和TDBGrid组件(DBGrid1/DBGrid2)。DBGrid1与Table1之间通过DataSource1建立关联,DBGrid2与Table2之间通过DataSource2关联。两个TTalbe组件的DatabaseName属性设为DBDEMOS,把Table1的TableName属性设为CUSTOMER.DB,把Table2的TableName属性设为ORDERS.DB。此时,这个窗体包含了两个不相关的数据库表。接下来要做的就是在这两个表之间实现关联,这需要用到细表的MasterSource 属性和MasterFields属性。在本项目中,把Table2的MasterSource属性设为DataSource1。当试图编辑MasterFields属性时,会出现一个Field Link Designer对话框,在此对话框中,需要指定通过哪些字段来把两个数据库表连接起来,在这里使用表示客户编号的CustNo字段。因为CustNo字段并非ORDERS表的主索引的组成部分,所以要用到包含CustNo字段的副索引。为此,就要在Field LinkDesigner对话框的Available Indexes框内选择CustNo字段。在选择了CustNo索引后,就可以从DetailFields和Master Fields框内选择CustNo字段,然后单击A d d按钮创建两个数据库表之间的链接。最后,单击O K按钮就完成了主/细表的关联。现在,如果对Table1进行浏览时,Table2所显示的数据仅限于特定的记录,这些记录的CustNo字段的值必须与Table1当前记录的CustNo字段的值相同。
也就是相关属性的设置, 不要想的太过于难理解.
但是要注意主从表之间的数据对应关系.
你得用Table!不能用Query1!
我试过很好用的
使用时设一下adodataset.masterfields and mastersource 就可以了