比较两个数据库中两个表的问题(100分)

  • 主题发起人 主题发起人 liuhaoy
  • 开始时间 开始时间
L

liuhaoy

Unregistered / Unconfirmed
GUEST, unregistred user!
比较两个数据库中两个表的问题(两个表中的记录相同),我相实现如果我在一个表中插入一条记录,两个表比较如果另一个表中没有这条记录,那么把我刚插入的记录加到另一张表中?
 
insert into 表B select * from 表A where 表B.主建 <> (select 表A.主建 from 表A)
 
同意楼上
 
这样应该没问题的
 
打开SQL查询分析器,按F1。
 
1.确定目录表是否有自增形字段,如果有,先取消自增设置(可用代码实现),如果没有,继续下一步
2.表结构相同,最简单的办法是insert tablename select * from anotherdatabasename.owner.tablename where not exists(Select * from tablename b where a.key=b,key )
 
大家帮我看一看这段代码的错误在什么地方,小弟新手.请各位前辈指点一下.

with adoquery3 do
begin
Close;
SQL.Clear;
sql.Add('select max(id) as 最大记录 from 档案');

Open;
end;
if not ADOQuery3.FieldByName('最大记录').IsNull then
begin
i:=ADOQuery3.fieldbyname('最大记录').AsInteger;
end
else
begin
i:=0;
end;
with ADOQuery2 do
begin
close;
sql.Clear;
sql.Add('select max(id) as 最大记录 from 档案');
Open;
end;
if not adoquery2.FieldByName('最大记录').IsNull then
begin
j:=ADOQuery2.fieldbyname('最大记录').AsInteger;
end
else
begin
j:=0;
end;
if i=j then
begin
Exit;
end
else
with ADOQuery2 do
begin
close;
sql.clear;
sql.Add('insert into 档案 values(最大记录=:a,姓名=:b,性别=:c,年龄=:d,国籍=:e,学历=:f,身份证=:g,专业=:h,家庭住址=:i)');
ADOQuery2.FieldByName('a').Value:=ADOQuery3.fieldbyname('最大记录').AsString;
ADOQuery2.FieldByName('b').Value:=ADOQuery3.fieldbyname('姓名').AsString;
ADOQuery2.FieldByName('c').Value:=ADOQuery3.fieldbyname('性别').AsString;
ADOQuery2.FieldByName('d').Value:=ADOQuery3.fieldbyname('年龄').AsString;
ADOQuery2.FieldByName('e').Value:=ADOQuery3.fieldbyname('国籍').AsString;
ADOQuery2.FieldByName('f').Value:=ADOQuery3.fieldbyname('学历').AsString;
ADOQuery2.FieldByName('g').Value:=ADOQuery3.fieldbyname('身份证').AsString;
ADOQuery2.FieldByName('h').Value:=ADOQuery3.fieldbyname('专业').AsString;
ADOQuery2.FieldByName('i').Value:=ADOQuery3.fieldbyname('家庭住址').AsString;
ExecSQL;
end;
 
'insert into 档案 [red](.......)[/red] values(最大记录=:a,姓名=:b,性别=:c,年龄=:d,国籍=:e,学历=:f,身份证=:g,专业=:h,家庭住址=:i)');
 
自己改了一下,但还是有问题.
有那位愿意帮一下忙.
 
不知道我上面的代码能不能实现,比较两个数据库中两个完全相同的表.
 
with ADOQuery2 do
begin
close;
sql.clear;
sql.Add('insert into 档案 values(最大记录=:a,姓名=:b,性别=:c,年龄=:d,国籍=:e,学历=:f,身份证=:g,专业=:h,家庭住址=:i)');
ExecSQL;
//////这下面的定位要改哪条记录?
////我暂时假定第一条///
first;
edit;
ADOQuery2.FieldByName('a').Value:=ADOQuery3.fieldbyname('最大记录').AsString;
ADOQuery2.FieldByName('b').Value:=ADOQuery3.fieldbyname('姓名').AsString;
ADOQuery2.FieldByName('c').Value:=ADOQuery3.fieldbyname('性别').AsString;
ADOQuery2.FieldByName('d').Value:=ADOQuery3.fieldbyname('年龄').AsString;
ADOQuery2.FieldByName('e').Value:=ADOQuery3.fieldbyname('国籍').AsString;
ADOQuery2.FieldByName('f').Value:=ADOQuery3.fieldbyname('学历').AsString;
ADOQuery2.FieldByName('g').Value:=ADOQuery3.fieldbyname('身份证').AsString;
ADOQuery2.FieldByName('h').Value:=ADOQuery3.fieldbyname('专业').AsString;
ADOQuery2.FieldByName('i').Value:=ADOQuery3.fieldbyname('家庭住址').AsString;
post;
end;
/////试下。
 
其实,漂流的雲的代码很简洁。liuhaoy你没必要写那么多吧
 
老大,记录很多的时候这样做效率很低吧,还是使用触发器为好,如果是sql server的话
 
存储过程也不错
 
嗯,说的对.
 
希望大家还能给一些意见,谢谢.
 
我还是想知道,我的代码要如何改.
 
ADOQuery2.parameters.parametebyname('a').Value:=ADOQuery3.fieldbyname('最大记录').AsString;
ADOQuery2.parameters.parametebyname('b').Value:=ADOQuery3.fieldbyname('姓名').AsString;
ADOQuery2.parameters.parametebyname('c').Value:=ADOQuery3.fieldbyname('性别').AsString;
ADOQuery2.parameters.parametebyname('d').Value:=ADOQuery3.fieldbyname('年龄').AsString;
ADOQuery2.parameters.parametebyname('e').Value:=ADOQuery3.fieldbyname('国籍').AsString;
ADOQuery2.parameters.parametebyname('f').Value:=ADOQuery3.fieldbyname('学历').AsString;
ADOQuery2.parameters.parametebyname('g').Value:=ADOQuery3.fieldbyname('身份证').AsString;
ADOQuery2.parameters.parametebyname('h').Value:=ADOQuery3.fieldbyname('专业').AsString;
ADOQuery2.parameters.parametebyname('i').Value:=ADOQuery3.fieldbyname('家庭住址').AsString;
 
其他没有看,估计效率低。最好采用存储过程比较。
 
把两个表看成独立的,插完第一张表插第二章,插之前做个判断。
 
后退
顶部