CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

如何将主表和明细表分别在两个dbgrid中显示,(不用shape语言)?

楼主cutedelphigirl(delphi女孩)2003-09-04 13:46:51 在 Delphi / VCL组件开发及应用 提问

主表a  
  字段:number,customer,inputdate,inputer(即单号,客户,录入日期,录入人)  
  明细表b:  
  字段:number,code,name,count,unitprice(即单号,物料代码,名称,数量,单价)  
  它们通过单号关联  
  我想把它们用一上一下两个dbgrid显示它们,  
  它们是互动的(也就是关联显示的)  
  怎么样做呢?  
  问题点数:0、回复次数:28Top

1 楼cutedelphigirl(delphi女孩)回复于 2003-09-04 15:03:37 得分 0

怎么没人?Top

2 楼laoguang_2008(老光)回复于 2003-09-04 15:38:24 得分 0

在数据库(sqlserver)建立关联Top

3 楼treestar001(小鸟)回复于 2003-09-04 15:48:12 得分 0

用两个DBGrid反映主,从表的数据集,然后在主表的ADOQuery的AfterScroll事件中写关于从表的  
  查询语句,主从表一定要有相关联字段,这样才可以建立联系!  
  (还有别的方法,自己可以研究!)Top

4 楼lean77(粉红凤凰^飞^)回复于 2003-09-04 15:55:04 得分 0

主要是设置子dbGrid关联主dbGrid的关联字段Top

5 楼Little2000(rainy)回复于 2003-09-04 15:59:51 得分 0

在上面主表的ADOMast的AfterScroll事件中写:  
  ADOSub.Close;  
  ADOSub.Sql.Text   :=   'select   *   from   ChildTable   where   单号   =   '''+ADOMast.FieldByName('单号').ASString+'''';  
  ADOSub.Open;  
  这样做就可以了,别忘记连接数据源Top

6 楼HelpMeNow(混口飯吃)回复于 2003-09-04 16:14:08 得分 0

在子表用Query查询的设datasource为主表...  
  sql:   select   *   from   明细表   where   number=:number  
  就可以啦.Top

7 楼samcrm(镜花水月)回复于 2003-09-04 16:31:57 得分 0

任何代码都不用即可实现。  
  1、放两个ADOQuery(或Query)。  
  ADOQuery1的SQL属性为:select   *   from   a  
  ADOQuery2的SQL属性为:select   *   from   b   where   单号=:单号  
   
  2、放两个DataSource和两个DBGrid  
  分别连到两个ADOQuery  
   
  3、重要的步骤:  
  设置ADOQuery2的DataSource属性为DataSource1。  
   
  搞定!  
   
  Top

8 楼cutedelphigirl(delphi女孩)回复于 2003-09-04 16:42:03 得分 0

Let   my   try!Top

9 楼ZyxIp(绝望中...)回复于 2003-09-04 16:43:55 得分 0

 
   
  来晚了............Top

10 楼JustinLee(皇阳文隐)回复于 2003-09-04 16:52:47 得分 0

Little2000(Rainy)   说的不错!Top

11 楼Niuniu2003(牛牛)回复于 2003-09-04 16:53:27 得分 0

Table1,  
  DataSourece1,  
  DataSourece1.dataset   =   Table1;  
  Table1.tablename   =   'a';  
   
  table2,DataSourece2,  
  dataSourece2.Dataset   =   Table2;  
  table2.Tablename   =   'b';  
  table2.Mastersourece   =   DataSourece1;  
  table2.MasterFields   =   'number=number';  
  table2.IndexName   =   'number';  
   
  dbGrid1.datasourece   :=   datasourece1;  
  dbGrid2.dataSourece   :=   dataSourece2.  
  Top

12 楼netatomy(Chris)回复于 2003-09-04 17:07:02 得分 0

来晚了............  
  Top

13 楼afraqiu(afra)回复于 2003-09-04 17:48:49 得分 0

楼上说得没错,  
  可以实现从表随着主表记录指针移动而移动。Top

14 楼cutedelphigirl(delphi女孩)回复于 2003-09-04 17:59:53 得分 0

samcrm(阿靖):where   单号=:单号  
  怎么写法?  
  是:  
  select   *   from   b   where   b.number=a.number  
  吗?  
  Top

15 楼ww94307(外星人)回复于 2003-09-04 18:18:29 得分 0

samcrm(阿靖)   和Niuniu2003(牛牛)两个人说的都可以呀。  
  你那里还没有成功吗?  
   
  select   *   from   b   where   b.number=:num  
  num是一参数,就是把你adoqueyr1当前行的单号(也就是a.number)取出,付给这个参数。  
  然后adoquery2.open即可。Top

16 楼cutedelphigirl(delphi女孩)回复于 2003-09-04 18:34:48 得分 0

我写:  
  select   *   from   b   where   number:=number  
  出错:应用程序定义parmeter对象的方式不当Top

17 楼cutedelphigirl(delphi女孩)回复于 2003-09-04 19:05:42 得分 0

samcrm(阿靖)说代码不用写的?  
  Top

18 楼geyobing(大地精灵)回复于 2003-09-04 19:12:14 得分 0

用Niuniu2003(牛牛)的不需要写代码,学DELPHI的应该都知道,明细表的设置啊,也可以用一个Query和一个Table来完成的,楼主,我想这个只要找本DELPHI数据库方面的书都有介绍的啊,Top

19 楼DouZHlang(飞呀飞)回复于 2003-09-04 19:20:50 得分 0

赞成samsrm   的方法   up   upTop

20 楼hnhb(不死鸟)回复于 2003-09-04 19:31:50 得分 0

阿靖说的没错,你一试就知道了。Top

21 楼mrtxc(阿春)回复于 2003-09-04 21:25:44 得分 0

楼主,不好意思,今天下午太忙,没上论坛,所以现在才回。下次可以用QQ联系,不发消息。  
   
  告诉你一个不写代码只动鼠标的方法:  
   
  1、在窗体上放两个ADOTable,两个DBGrid,两个DataSource。假设Table1为主表,Table2从表,Grid1显示主记录,Grid2显示从记录,DataSoure1和Table1关联,DataSource2和Table2关联,Grid1和DataSource1关联,Grid2与DataSource2关联。  
   
  2、分别  
  设置如下:(以Delphi的范例数据库DBDemos为例)  
  两表相同:  
  Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=D:\App\Common   Files\Borland   Shared\Data\dbdemos.mdb;Persist   Security   Info=False  
   
  3、分别设置两个Table的TableName,如果你不熟悉,也可只用鼠标。  
  Table1:   customer  
  Table2:   orders  
   
  4、将Table2.MasterSource设为DataSource1。  
   
  5、将Table2.MasterFields设为CustNo。  
   
  6、将两个Table的Active设为True。  
   
  OK,收工!  
   
   
   
  Top

22 楼cutedelphigirl(delphi女孩)回复于 2003-09-04 21:39:24 得分 0

我用的是adoquery1与adoquery2  
  而且adoqquery1以后我想做成动态的sql,先模拟一下固定的  
  我是新手,才学一个多  
  望大哥哥们原谅Top

23 楼hmily1688(没什么好说的)回复于 2003-09-05 02:56:41 得分 0

哈哈,建议你看看delphi的Demos中关于主表明细表的设置。mrtxc(阿春)及楼上的几位已经讲得很清楚了。Top

24 楼suuare(督察)回复于 2003-09-06 17:58:27 得分 0

很容易      
  adoquery1.sql:=select   a.*,b,*   from   a,b   where   a.单号=b.单号    
  然后用两个dbgrid     它们的数据集都是adoquery1   数据源也一样    
  不同的就是双击bdgrid后......Top

25 楼cdzjhmao()回复于 2003-09-07 09:05:17 得分 0

to   mrtxc   (阿春)  
  关于主从表的问题,你在http://expert.csdn.net/Expert/topic/2223/2223154.xml?temp=.7197992  
  中写的,印象中好象在table1中选择一项,table2的数据跟着显示,那返过来,点击table2,table1跟不跟着显示呢?Top

26 楼Tolin2(晶)回复于 2003-09-10 04:35:58 得分 0

upTop

27 楼liner02(liner02)回复于 2003-09-10 07:55:16 得分 0

Niuniu2003(牛牛)   和阿春说的没错我就是这么干的.  
  cdzjhmao()   说的反过来好象是不行的吧Top

28 楼wupangzi(无本之木)回复于 2003-09-10 08:09:02 得分 0

mrtxc(阿春)   的是对的!其实动态的查询也是不错的选择!Top

29 楼ganju(柑橘)回复于 2004-02-03 17:27:29 得分 0

用MASTERFIELDS也可以的,D5编程指南上有Top

相关问题

  • 请教无刷新主表明细表分页控件思路
  • 如何保证主表/明细表的更新在同一事务内完成??
  • 求一sql语句或存储过程!主表明细表的插入
  • 如何查找主表中有而明细表中无明细的记录
  • MIDAS的两个clientdataset建立主表/明细表关系。为什么会出现“cannot find object”的错误??
  • 单据数据分主表与明细表,使用分区视图如何保证或加快速度?
  • 请问各位高手:如何在ASP.net中实现在类似C/S中的订单中主表和明细表的同时提交?
  • 如何利用两个 query 组件,两个 dbgrid 一个 datasource ,去创建主/细表(明/细表)?
  • 速达3000客户销售明细表可以有小计和合计,请问这个DBGrid是用什么做的?
  • 什么是主要/明细表?

关键词

  • 字段
  • 代码
  • sql
  • 数据
  • 属性
  • grid
  • 查询
  • delphi
  • 单号
  • 主表

得分解答快速导航

  • 帖主:cutedelphigirl

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo