比如:
  主次表结构的:主表与次表都是编辑状态,主表一条记录,用edit.text显示的,
次表由DBGrid显示,现在我想实现“在DBGrid中输完多条记录以后,离开DBGrid焦点后,把其中一项的值汇总赋值到主表的某一个字段。”请问如何实现?
例子单号:394885  项目名称:辣食品 
总金额: 160(这里就是要用下面DBGrid中一个字段的汇总赋值过来的)下面是子表DBGrid当中显示的:
鸭子   2只    20元
鹅     3只    60元
鸡     1只    80元
上面主表的“总金额”就是所要赋值的。一离开焦点就要赋值过去。
谢谢!

解决方案 »

  1.   

    TForm1.onDBGrid1exit(...);
    var
      StrSql:string;
    begin
      AdoQuery1.close;
      StrSql := 'Select sum('金额') from 次表';
      AdoQuery1.Sql.Text := StrSql;
      Adoquery1.open;
      Edit1.Text := FloatToStr(AdoQuery1.FieldbyName('金额').asFloat);
      StrSql := 'Update 主表 Set 金额 = ' + FloatToStr(AdoQuery1.FieldbyName('金额').asFloat);
      ADOConnect1.Execute(StrSql); 
    end;
      

  2.   

    StrSql := 'Select sum('金额') from 次表';这样求的话,我其他单号的金额也会汇总进来的,可是在保存之前我这个单号都是000000000,保存是才分配单号的。主表我都是动态生成edit的。
    请指教
      

  3.   

    比如说我增加一张单,我现在想统计的是DBGrid(是这张单次表的内容)中输入的金额汇总,这个时候还未保存到数据库中。只是一个add的过程,
      

  4.   

    其实就是汇总DBGrid某列数据
      

  5.   

    看到的有点晚
    例子表名:hh2
    name   jine   kind
    ed     10     1 
    edi    10     1
    edit   15     1 
    edit1  16     2
    黄海   17     2
    小兰   18     1 
    小明   19     3 
    根据kind汇总:
    select Kind, sum(jine) as 金额 from hh2 group by kind结果
    kind     金额
    1        53 
    2        33
    3        19
      

  6.   

    对不起,可能是我没有讲清楚。
    我的意思是:
    在DBGrid输入数据时,把DBGrid中某列汇总到一个edit.text上面。
    鸭子   2只    20元
    鹅     3只    60元
                             这个时候要时离开DBGrid焦点,就马上赋值给Edit.text 显示 80元
    要是继续输
    鸭子   2只    20元
    鹅     3只    60元
    鸡     3只    60元
                             这个时候要离开DBGrid焦点,就马上赋值给Edit.text 显示 140元
    也就是求在编辑状态下DBGrid中某列数据的汇总。在主次表单据操作中,其实这个时候的数据还未保存在数据库中。要是我点击取消的话,这些数据也就不存在了。谢谢了。
      

  7.   

    还需要什么汇总?
    可以把Sql选择语句作为临时表来用,比如我那个例子里面
    Select * from (select Kind, sum(jine) as 金额 from hh2 group by kind);
    既然有了选择Sql,就可以用ADOQuery显示某一个字段的值
      

  8.   

    不知道你有没有写过主次表单据方面的?就是在保存一张单据前你子表DBGrid中显示的数据暂时还未保存的!
      

  9.   

    次表:可以用Append ....post 保存到数据库,主表可以在次表post的时候汇总保存