设:Access数据库A中a表 Access数据库B中b表
a表数据更新变化时,b表同时改变,即同步;
现在采取的方法是
while not aqryA_a.Eof do
begin
  aqryB_b.close;
  aqryB_b.sql.text := 'select count(*) as AS HaveCount where ID='+aqryA_a.FieldByName('ID').asString;
  aqryB_b.open;
  if aqryB_b.FieldByName('ID').asInteger <=0 then 
  begin
    aqryUpdate.append;
    aqryUpdate.FieldByName('XXX').asString := aqryA_a.FieldByName('XXX').asString;  
  end;   aqryA_a.Next;
end;请问下,有没有什么更好的解决思路,现在每次数据超过10000条时,执行开销太大。

解决方案 »

  1.   

    if aqryB_b.FieldByName('ID').asInteger <=0 then  是不是有问题呀?
    是不是应该
    if aqryB_b.FieldByName('HaveCount').asInteger <=0 then ?
    意思是说如果要把所有A表中有的,而B表中没有的记录插入B表,是这个意思吧?
    那直接用查询语句执行,肯定比循环效率高很多
    Insert Into TableB select YourNeedField From TableA a Not Exists (Select Id From TableB Where ID=a.ID)
      

  2.   

    Access中我记得有个链接表,右键菜单里有个Link Tables,随便一个数据库中链接过去就行了,就能当自己数据库中表访问了,最好只对这个链接表读,比如你要更新B表,那就在B表的数据库中链接A表,这样就可以了
      

  3.   

    恩 链接表这主意确实不错,不过数据库也有可能不是access,有可能是其他数据库
      

  4.   

    链接表不是可以链接ODBC吗?你可以建立一个ODBC,基本上常用的数据库都能链接了
    在链接表建立是的对话框,下面不是可以选文件类型吗?选ODBC Database()就行了
      

  5.   

    恩,那,两个查询出来的 ADOQuery数据集 比较,我想知道有没有更优化的比较算法呢?
      

  6.   

    都查到数据集里,两个数据集比较就还得用循环,效率估计能高点,但也高不到哪里去...
     with aqryA_a do
       begin
         Close;
         Sql.Clear;
         Sql.Add('Select * from TableA');
         Open;
       end;
     with aqryB_b do
       begin
         Close;
         Sql.Clear;
         Sql.Add('Select * from TableB');
         Open;
       end;
    while not aqryA_a.Eof do
      begin
       if Not aqryB_b.Locate('ID',aqryA_a.FieldByName('ID').asString,[]) then//没在B中找到
        with aqryC do
         begin
           //插入B操作
         end;
        
       aqryA_a.Next;
      end;