我有二个表的数据
表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、
户号 户名 抄表时间 水量 小计
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中的数据就添加。最后返回信息,更新了多少条记录,添加了多少条数据。
delete from 表1 where 户号 in (select 户号 from 表2)
insert into 表1 select * from 表2
select count(*) as cnt2 from 表2更新了 cnt1 条记录
添加了 cnt2-cnt1 条数据
你用2 个dbgrid来显示,然后那个 使用来个integer 变量来保存
你遍历标,然后分别判断表1 中是否存在如果存在就 覆盖,如果不存在则添加
uses db;
locate 方法,
你用俩个表中的关键字 ;用户名来判断啊
不过,这样的方法当数据库特别大的时候执行效率太……了
语法上可能有点小问题,仅供参考!
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;