对于这个问题，我想应该是因为你在第一次向new.mdb中添加old1.dbf时，是逐条添加，7000多条记录用二十多秒是比较正常的，但是在你用old2.dbf更新new.mdb时，因为你每更新一条记录都要使用select语句查找stu_ID号，这相当于你每更新一条记录，就又对new.mdb库查找了一遍，根据查找的平均时间，也是遍历全记录的一半左右，8000多条记录，就是你又对new.mdb遍历了8000多遍，所以你第二次用时六七分钟也是有可能的。 
    如果你想提高速度，你可以先对old2.dbf和new.mdb以stu_ID进行相同升序或降序排序，然后从头开始，利用比较插入法：如下 
     if old2.stu_ID>new.stu_ID then '如果old2.stu_ID大，不用插入,new记录后移 
     new.skip 
     else if old2.stu_ID     new.update(old2.stu_ID) 
     new.skip 
     old2.skip 
     end if 
     end if 
     end if 
    利用这个方法可以所用的平均时间就是对old2和new遍历一遍，一共用两遍就可以完成估计大概用时在50秒以内。但是排序可能要花去一定的时间，你可以比较一下，看这种方法是否可以节省时间。 
<END>     
我想问题在于你在循环体内打开Recordset的缘故。即： 
     rs.Open "SELECT * FROM tblNew WHERE stu_ID='" & Trim(tempstuID) & "'" 
    使用ado打开数据比较慢（比DAO慢），特别RS的游标类型是客户端游标时。 
    事实上你可以在循环体外打开rs,如下： 
     rs.Open "Select * from tblNew" 
    然后在循环体内使用Find方法查找是否有满足条件的记录： 
     rs.MoveFirst '在ADO中，这句不可少 
     rs.Find "stu_ID ='" & tempstuID & "'" 
     If rs.EOF Then 
     '添加记录 
     Else 
     '更新记录 
     End If 
<END>
    