我有二个表的数据
表1、
户号   户名    抄表时间      水量    小计
2001  张三    2002-01-01    100      50
2002  李四    2002-01-03    120      60
2003  王五    2002-01-03    140      70表2 
户号   户名    抄表时间      水量    小计2001  张三    2002-01-01    300      150
2002  李四    2002-01-03    220      110
2003  王五    2002-01-03    440      220
2004  赵六    2002-01-01    200      100
2005  孙七    2002-01-03    320      160我想表2的数据来更新表一的数据,当表2中有户号、和表1中户号相同的用户时,就用表2中的数据替换表一的数据,如果表1中没有表2中的数据就添加。最后返回信息,更新了多少条记录,添加了多少条数据。

解决方案 »

  1.   

    select count(*) as cnt1 from 表1 where 户号 in (select 户号 from 表2)
    delete from 表1 where 户号 in (select 户号 from 表2)
    insert into 表1 select * from 表2
    select count(*) as cnt2 from 表2更新了 cnt1 条记录
    添加了 cnt2-cnt1 条数据
      

  2.   

    呵呵,我到是有个方法,不过速度可能有点慢,
    你用2 个dbgrid来显示,然后那个 使用来个integer 变量来保存 
    你遍历标,然后分别判断表1 中是否存在如果存在就 覆盖,如果不存在则添加
    uses db;
    locate 方法,
    你用俩个表中的关键字 ;用户名来判断啊
    不过,这样的方法当数据库特别大的时候执行效率太……了 
      

  3.   

    基本的思想是这样,效率上可能有点慢
    语法上可能有点小问题,仅供参考!
    query1 表一
    query2 表二
    Updatecount,inertcount:integer = 0;if query2.active then query2.close;
    query2.sql.clear;
    query2.sql.add('select * from 表一');
    query2.open;
    for i:=0 to query2.recordcount - 1 do
    begin
      if query1.active then query1.close;
      query1.sql.clear;
      query1.sql.add('select count(*) as aa form 表一' where 户号=' + query2['户号']);
      query1.open;
      count := query1[''];
      query1.close;  if count<=0 then
      begin
        query1.sql.clear;
        query1.sql.add('insert into 表一 (户号,户名,抄表时间,水量,小计) values (:a,:b,:c,:d,:e));
        query1.parambyname('a') := query2['户号'];
        query1.parambyname('b') := query2['户名'];
        query1.parambyname('c') := query2['抄表时间'];
        query1.parambyname('c') := query2['水量'];
        query1.parambyname('d') := query2['小计'];
        query1.ExecSQL;
        inertcount := inertcount + 1;
        query1.close;
      end else
      begin
        query1.sql.clear;
        query1.sql.add('Update  表一 set 户名=:b,抄表时间=:c,水量=:d,小计=:e where 户号 := a;
        query1.parambyname('a') := query2['户号'];
        query1.parambyname('b') := query2['户名'];
        query1.parambyname('c') := query2['抄表时间'];
        query1.parambyname('d') := query2['小计'];
        query1.ExecSQL;
        Updatecount := Updatecount + 1;
        query1.close;
      end; 
    end;