[size=16px] [size=11px]ADOTable1在frm_main中、同时有个DBGrid1来显示数据,ADOTable2、ADOTable3、ADOTable4、ADOTable5分别在frm2、frm3、frm4、frm5中(都有DBGrid显示数据),我现在要把ADOTable2和ADOTable3中的某个字段相减等于frm_main中的Edit1.text的值显示在ADOTable1中,然后把ADOTable4、ADOTable5中的某个字段相减等于frm_main中的Edit2.text的值显示在ADOTable1中[/size][/size]
注意:ADOTable1包含了ADOTable2、ADOTable3、ADOTable4、ADOTable5中的所有字段。ADOTable1所有字段都显示完了再另外加新的一行。

解决方案 »

  1.   

    是这样的话为何要用dbgrid直接用stringgrid来做不是更简单吗?
      

  2.   

    这个,你要不就循环table去做,要不就通过sql去数据库中筛选(这个最靠谱),用adoquery把,这个方便些
      

  3.   

    使用sql關聯語句(幾個ado級聯在一起,如left join...)然後直接case出(如:a-b)C的差字段出來即可...自己變通一下:
    select *,
    (case BM when BM then g1+g2+g3+g4+g5+g6+g7+g8 else 0 end) as ttt
     from (
    select BM,'人數' as qf,
    (case BM when BM then (select COUNT(1) from Res_User_Temp where BM=a.BM and(YEAR(GETDATE())-YEAR(CSRQ) between 16 and 21)) end)as g1,
    (case BM when BM then (select COUNT(1) from Res_User_Temp where BM=a.BM and(YEAR(GETDATE())-YEAR(CSRQ) between 22 and 27)) end)as g2,
    (case BM when BM then (select COUNT(1) from Res_User_Temp where BM=a.BM and(YEAR(GETDATE())-YEAR(CSRQ) between 28 and 32)) end)as g3,
    (case BM when BM then (select COUNT(1) from Res_User_Temp where BM=a.BM and(YEAR(GETDATE())-YEAR(CSRQ) between 33 and 38)) end)as g4,
    (case BM when BM then (select COUNT(1) from Res_User_Temp where BM=a.BM and(YEAR(GETDATE())-YEAR(CSRQ) between 39 and 44)) end)as g5,
    (case BM when BM then (select COUNT(1) from Res_User_Temp where BM=a.BM and(YEAR(GETDATE())-YEAR(CSRQ) between 45 and 50)) end)as g6,
    (case BM when BM then (select COUNT(1) from Res_User_Temp where BM=a.BM and(YEAR(GETDATE())-YEAR(CSRQ) between 51 and 56)) end)as g7,
    (case BM when BM then (select COUNT(1) from Res_User_Temp where BM=a.BM and(YEAR(GETDATE())-YEAR(CSRQ) between 57 and 62)) end)as g8
     from Res_User_Temp a ) f group by f.BM,f.qf,f.g1,f.g2,f.g3,f.g4,f.g5,f.g6,f.g7,f.g8