bill_id (单号)  fsrq(发生日期)   bill_type(类型 )  ....
JH20080430      2008-04-30       进货         ....
TH20080430      2008-04-30       退货         ....
这里采购应付款和退货应收款两张表合成的一张视图进货明细表
in_id (单号)   mount(数量)
JH20080430     2退货明细表
out_id(单号) mount(数量)
TH20080430    5
TH20080430    6问题是 当我当击(dbgrid1)取得bill_id(单号)是TH20080430 时在dbgid2显示这两条数据
TH20080430    5
TH20080430    6方法有其一就是再用dbgrid 一个是进货明细 一个是退货明细 请问还有其它好的方法没 

解决方案 »

  1.   

    帐务分析表
    bill_id (单号)  fsrq(发生日期)   bill_type(类型 )  .... 
    JH20080430      2008-04-30       进货         .... 
    TH20080430      2008-04-30       退货         .... 
    进货明细表 
    in_id (单号)   mount(数量) 
    JH20080430     2 退货明细表 
    out_id(单号) mount(数量) 
    TH20080430    5 
    TH20080430    6 问题是 当点击(dbgrid1)帐务分析表单号TH20080430 那么在这个单号的明细(dbgrid2)显示的的数据是
    TH20080430    5 
    TH20080430    6 
    否则若是单号JH20080430 那么显示的是 进货明细表的数据  
    JH20080430     2 
    方法有其一就是再用dbgrid 一个是进货明细 一个是退货明细 请问还有其它好的方法没   
     
      

  2.   

    写 SQL 语句的时候可以使用 联合查询-----  dbgrid2 的 Query 的SQL 可以这样写: 提供的参数可以 在程序里写,也可以设置dbgrid2的query 的
    -- datasource 为 dbgrid1 的 datasource
    select in_id as 单号  , mount as 数量
    from 进货明细表 
    where in_id =:bill_id (单号)
    unit
    select out_id as 单号 , mount as 数量 
    from 退货明细表
    where Out_id = :bill_id (单号)
      

  3.   

    老兄,分也太少了吧。
    Mark
      

  4.   

    楼主tnthanxu 的方法我有试 不行 当明细表有两条记录时就不行 只能显示一条   
      

  5.   

    用union all这样不去除重复记录
      

  6.   

    不可能显示一个吧,哦,不好意思啊,写错了 是 union 只要有想同的字段,都会显示出来的,
      

  7.   

    感觉在逻辑上是有矛盾的,你既然用单号来确定要显示的明细,那他当然只会显示这张单子的明细,凭什么要显示另外一张单子的内容?首先建议你的帐务表再加个供货单位ID的字段,这样一来不但可以实现你的需要,方法还很多:
    1。把进货类的明细放在一张表,不管是进货还是退货,按单位和日期来过滤帐务表,帐务表与明细通过单号字段连接。
    2。还是用两张表,把帐务明细与进货明细和退货明细都连接一次,结果union起来。
    3。两张表的情况下,建临时表,把符合条件的记录都插入临时表,这样进货退货各插入一次,就在一起了。
    问题的关键是你的过滤条件和你想实现的目的完全是两回事,你要吗按单号,要吗按单位和日期来过滤,看你想要什么了