不同数据库之间的比对如何更快(50分)

  • 主题发起人 主题发起人 erbbchen
  • 开始时间 开始时间
E

erbbchen

Unregistered / Unconfirmed
GUEST, unregistred user!
本地数据需要外网数据比对,怎么比较数据和插入数据,我觉得我的方法很笨,而且时间很慢,代码如下:Query_jc是内网的数据<br>DM.ADC_web.BeginTrans;<br>Query_jc.First;<br>while not Query_jc.Eof do<br>&nbsp; begin<br>&nbsp; //将数据与远程数据库比较上传<br>&nbsp; ls_sql := 'select * from t_jc where jch = ''' + Query_jc.FieldByName('jch').AsString + ''' and kh = ''' + Query_jc.FieldByName('kh').AsString + '''';<br>&nbsp; Query_webjc.Close;<br>&nbsp; Query_webjc.SQL.Clear;<br>&nbsp; Query_webjc.SQL.Add(ls_Sql);<br>&nbsp; Query_webjc.Open;<br>&nbsp; if Query_webjc.RecordCount = 0 then<br>&nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp;//外网新增<br>&nbsp; &nbsp; &nbsp;Query_webjc.Append;<br>&nbsp; &nbsp; &nbsp;Query_webjc.FieldByName('jch').AsString := Query_jc.FieldByName('jch').AsString;<br>&nbsp; &nbsp; &nbsp;Query_webjc.FieldByName('kh').AsString := Query_jc.FieldByName('kh').AsString;<br>&nbsp; &nbsp; &nbsp;Query_webjc.Post;<br>&nbsp; &nbsp; &nbsp;DM.ACmd.CommandText := '更新本地的';<br>&nbsp; &nbsp; &nbsp;DM.ACmd.Execute;<br>&nbsp; &nbsp; &nbsp;end;<br>&nbsp; Query_jc.Next;<br>&nbsp; end;<br><br>DM.ADC_web.CommitTrans;<br>Query_jc.Refresh;<br>这样的四行数据都很慢,几百行数据怎么办,执教一下。
 
我没有测试过。 说我个人的看法。<br>1、如果你的数据库有关键字段,那你可以比较关键字段就好。<br>2、是不是可以直接使用sql语言实现?<br>比如 insert into A from B where a.Key not in (select &nbsp;b.key from B)<br>(没有测试过的语句,只是想说明想法。)
 
楼上的这位,<br>1、我就是用关键字段比较的,否则也没法判断唯一了<br>2、单独一个sql语句比我那样应该快很多,不过这样的语句有点复杂,我也没有用过
 
没试,只是猜测,楼主可以把上面的条件放到一个字符串中,然后用用IN的SQL语句全部Open扔到一内存表中,这样就是说把多次与数据库交互改成一次交互,其他的内容都在内存表中做就好了....<br>至于APPEND语句,写成INSERT最好了...
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部