请高手出山:关于dbgrid数据保存的难题!
具体难点如下:有两个表:1.商品表(字段有:商品编号,名称,型号)
                      2.订货表(字段有:商品编号,订购数量)
    在订货form窗口中放入一个dbgrid,用于订货的输入,表头为:商品编号,名称,型号,订购数量.用的sql语句是:select 商品编号,名称,型号,订购数量 from 两张表(略).问题是:我如何把订购数量信息通过dbgrid添加后再写回订货表中去?(因为dbgrid包含了两张表的信息,我必须保证原来的商品表的内容不变,而订货表中添加新的订货信息)
    求救,万分感谢!烦请说明详细实现机制,最好有Sql语句,谢谢各位兄台:)

解决方案 »

  1.   

    这不一两下可以说清的,我只是给你说个思路:
    加一个adoquery1,和datasource1,在属性写sql语句:select * from 商品表
    加一个datasource2和adoquery2,在sql中写sql语句:select * from 订货表
    双击adoquery,然后add all field(右键),然后new field(右键)用来建立一个新的字段商品名称,点击lookup字段,key fields= 商品编号,dataset= adoquery1 lookup keys=商品编号
    result field=商品名称,(商品型号同理)
    dbgrid.datasource=datasource2;
    procedure form1.button1(sender:object);//新增
    begin
      if adoquery2.active then adoquery2.close;
      adoquery2.open
      adoquery2.last;
      adoquery2.append;
    end;
    procedure form1.button2(sender:object);//保存
    begin
      if adoquery2.State = dsBrowse then exit;
      try
       adoquery2.post;
      except
        showmessage('保存出错');
        adoquery2.Cancel ;
        raise;
      end;
    end;
    有一些细节我没有详细写,希望对你有的起发吧!~~    
      

  2.   

    呵呵,好像有很多解决办法嘛,不一定要高手才能解决吧?
    1、可以用存储过程来更新,这个要编写存储过程,代码我不写了。
    2、可以用另外一个Query控件来实现保存数据的功能啊。
    例如:1、AdoQuery1:select 商品编号,名称,型号,订购数量 from 两张表
          2、AdoQuery2:'update 订货表 set 订购数量='+AdoQuery1.FieldByName('订购数量').asString+' where 商品编号='+.FieldByName('商品编号').asString;
    这里有几个需要注意的问题,AdoQuery1不可以更新,就是不让他提交保存,用AdoQuery2保存,如果不是用按钮来提交数据,那么就在AdoQuery1的BeforPost事件中触发AdoQuery2的保存,当然,实际使用的时候还有多测试一下。这里的语句只能表明思路,不一定能用到程序中