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

2024-11-06 18:30:42
推荐回答(3个)
回答(1):

究竟是两个库,还是一个库中的两个表?
如果是两个库,得有两个链接。
这个问题看似简单,实际上比较麻烦,主要是需要时间: 用二个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中的记录完全删除。
这只是一个思路,依你提问题的水平来看,你应该可以根据这个思路将这代码写出来。如果有困难,再追问,我来给你写。你的提问题的态度较好,是求,不是下命令,我愿意。

回答(2):

搞这么复杂做啥呢,一句SQL就完了
A表,B表,ID字段
Insert into A (字段) (select 字段 from B where ID not in (select distinct id from A))

回答(3):

建议不要用adoquery,用一个adodataset就可以,它的commandtext赋值为嵌套查询语句