关于两个数据表数据比较,执行速度问题。(100分)

  • 主题发起人 主题发起人 huzhaow
  • 开始时间 开始时间
H

huzhaow

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在要对两个数据的的两个表进行数据一致性比较。每个表都有四、五千条记录。将第
一个表每条记录和另一个数据库的一个表每条进行比较。找出记录不一样的数据。由于数
据量大,我现在的算法执行速度很慢。请问有谁有好的算法吗。

procedure TForm1.outbanbie(s:string);
var
i:integer;
mid:string;
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from banbie');
ADOQuery1.Prepared;
ADOQuery1.Open;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select * from t_icitem');
ADOQuery2.Prepared;
ADOQuery2.Open;
count:=ADOQuery1.RecordCount;
ProgressBar1.Max:=10*count;
i:=1;
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
mid:=ADOQuery1.fieldbyname(s).AsString;
ADOQuery2.First;
while not ADOQuery2.Eof do
begin
if mid=ADOQuery2.FieldByName('fnumber').AsString then
begin
bool:=true;
break;
end;
ADOQuery2.Next;
end;
if bool=false then
begin
advs.Cells[0,i]:=mid;
advs.Cells[1,i]:=ADOQuery1.fieldbyname('版别名称').AsString;
advs.Cells[2,i]:=ADOQuery1.fieldbyname('审定单位').AsString;
advs.Cells[3,i]:=ADOQuery1.fieldbyname('金额').AsString;
advs.Cells[4,i]:=ADOQuery1.fieldbyname('是否正式').AsString;
i:=i+1;
advs.RowCount:=advs.RowCount+1;
end;
ProgressBar1.Position:=ProgressBar1.Position+10;
ADOQuery1.Next;
BOOL:=FALSE;
end;

end;
 
select * from A where 关键字段 not in (select distinct A.关键字段 from A
inner join B on A.fieldA=b.fieldB)
 
我对的是两个不同的数据库中的两个表比较。你这样行吗。

能不能写的详细点。

我的一个数据库是huamao, 一个是k3bom,
对应的表是: material t_icitem
比较的字段是:Mid fnumber
 
这样的方式无法优化SQL语句,当然慢了,
先将sql server7.0的数据升级到sql server2000里来
然后在server2000里用存储过程实现,一定很快
 
你用的什么数据库,sql server的话只要赋予相应权限是可以访问
两个数据库中的表的,但要使用名字限定:数据库..表名.
如果是桌面型或异构数据库,就没有太好的办法了.
 
希望能给出具体的实现方法。较急。
先谢了
 
一个是用sql server2000,一个是sql server7.0
 
那也有方法,在 sql server 2000 中建立一个链接数据库连到7.0中(在安全性中)
,赋予相应的
权限.然后就可以使用服务器.数据库.所有者.表名访问其中的数据了.
 
接受答案了.
 

Similar threads

S
回复
0
查看
685
SUNSTONE的Delphi笔记
S
S
回复
0
查看
645
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部