delphi 中用两个adoquery 分别取出两个数据库中的数据,根据记录中的某一字段 比较,相等的保留一条,

delphi 中用adoquery1和 adoquery2分别取出两个数据库中的数据,根据记录中的某一字段比较,若相等,则把adoquery2中的相关记录删除;若不相等,则把adoquery2中的记录加到adoquery1中的相应表中,再把adoquery2中的这条记录删除。如此循环,直到adoquery2中没有记录。请附加代码。
删除的同时,请做一个文本记录,以便查询。所用的数据库是Access。谢谢各位老师、同行、朋友。

究竟是两个库,还是一个库中的两个表?
如果是两个库,得有两个链接。
这个问题看似简单,实际上比较麻烦,主要是需要时间: 用二个for 循环嵌套来处理,比较恰当,外层for循环的循环次数由adoquery2中的记录数决定,反正,adoquery2中的记录是要全部删除的,为了防止混乱,在循环执行过程中,不要做adoquery2的记录删除操作,待比较、保存做完之后,再一次性的删除。外层循环依次取出adoquery2中的记录,把记录中你所说的那个比较字段的值,赋值给一个局部变量S,然后进入内层for循环,该循环的次数由adoquery1的记录决定,需要定义的布尔型局部变量,在进入内层循环之前,令该变量为假,进入循环后,用变量S与adoquery1的记录中比较字段的值进行依次比较,如果找到相同的记录后,就令布尔变量为真,并强行退出内层循环。否则直到检查完毕后才退出内层循环,退出内层循环后检查布尔变量,如果为假,则执行将2保存到1的操作,这个操作最好做成过程内函数。 然后下移adoquery2的记录指针,进入下一次外循环。如此往复,检查完 adoquery2中的所有记录。如果要做文本记录,则创建一个memo,当布尔变量为假时,就在memo中写上记录某在 adoquery1找到,是什么什么,反之找不到,就写上记录某某在 adoquery1中找不到,已经保存到 adoquery1中,是什么什么。最好将2保存到1和写memo的操作做成一个函数。
外循环做完之后,用一条SQL语句,一次性的将 adoquery2中的记录完全删除。
这只是一个思路,依你提问题的水平来看,你应该可以根据这个思路将这代码写出来。如果有困难,再追问,我来给你写。你的提问题的态度较好,是求,不是下命令,我愿意。追问

谢谢,是两个数据库的两张表,请帮看一下,程序一运行就死机,cpu作用率50%左右。
请问一下怎么把当前记录一整条写入adoquery1的表中去。
代码太多了,这个字数不够。能加我的抠抠吗,我的抠抠是6的3的4是3在1在29-63。谢谢!

追答

adoquery1中数据记录达到了多少条,如果超过1000条,而且SQL语用了NOT IN 关键字的话,速度会告很慢,假死,类似这样的问题我处理过.晚上有时间,我跟你写一下,你最好把两数据表中字段名告诉我,但我不喜欢用ADO查询组件,我喜欢用ADOdateaset组件你的抠抠是6的3的4是3在1在29-63我看不懂,太笨

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-21
搞这么复杂做啥呢,一句SQL就完了
A表,B表,ID字段
Insert into A (字段) (select 字段 from B where ID not in (select distinct id from A))
第2个回答  2011-12-21
建议不要用adoquery,用一个adodataset就可以,它的commandtext赋值为嵌套查询语句