sql 处理access数据库有关问题, 急

sql 处理access数据库问题, 急!!!!!
本帖最后由 bcrun 于 2013-06-12 11:36:28 编辑
表tb1有15万记录,表tb2有2万多记录,要从tb1中删除字段a1不包含在tb2的记录。
oCn.execute "delete from tb1 where tb1.a1 not in(select a1 from tb2)"
经测试 当tb1 tb2 只有少量数据时没问题,但在真实数据处理时,程序就卡死了(是真的卡死了 ,过了很长时间tb1的记录数都没变化)。

对于这中情况怎么解决最好?
按tb2中的记录逐条在tb1中处理,代码可以持续运行,但处理速度极慢,无法忍受
如果把tb2中的记录分成若干段与tb1一起处理应该是个不错的选择,想请大家帮着看看多少条记录分成一段好?
或着还有什么更好的办法?

非常急 先谢谢大家了 !

------解决方案--------------------
如此大的数据量,对于Access而言,没有好的办法。建议你更换数据库。使用sql server
------解决方案--------------------
'新建一个窗体,在窗体中加一个命令按钮加上下面代码
Private Sub Command0_Click()
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Set cn = CurrentProject.Connection
    rs.Open "select a1 from tb2", cn, 3
    Do While Not rs.EOF
        cn.Execute "delete from tb1 where a1=‘"+Cstr(rs.Fields("a1").Value)+"'"
        rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub

------解决方案--------------------
不理解LZ为啥说没办法装Sqlserver,哪怕用sqlserver 2k也比access效率高的多。

Access毕竟功能有限,

最主要的优点是程序上几乎是不需要改动的。。。
------解决方案--------------------
rs.Open "select a1 from tb2 where a1 not in (select a1 from tb1)", cn, 3
------解决方案--------------------
tb1,tb2的a1应该创建索引
------解决方案--------------------
搞程序的描述贵在精确度,我不知道你说的“很长时间”是多少。
你可以参考一般的速度经验对比一下,比如每秒200条,所以要是你平均1分种删除的条数不少于1万条的话,用这种方法的速度就算是正常。
------解决方案--------------------
当然,这还和你记录的大小有关。另外这种需求,可能很多人直接建个表,把要保留的记录insert过去,再把原表Drop掉,再把新表名字改回去。