2014-11-05 19 views
0

我有一个访问数据库,它有从另一个访问数据库链接到它的表以保存数据。每天,实验室管理员通过单击按钮来运行一个进程,该进程将数据从该数据库传输到MS SQL Server数据库,然后从Access数据库中删除数据。我继承了这些数据库,没有时间或权力来改变数据库结构,我们将用一个新的LIMS完全取代访问数据库,我们正在明年购买和实施该LIMS。访问vba SQL删除查询现在停滞并且在工作几个月后从未执行

我的问题是,其中一个DELETE SQL查询已停止执行。每当我执行这个查询时,数据库都会挂起(让它长达20分钟),直到我拉起任务管理器并终止应用程序。我试图将SQL查询从VBA环境中取出,并通过MS Access查询运行它,并获得相同的结果。所以基本上它工作了很长一段时间(去年八月感觉),现在它已停止工作。

这里是DELETE语句的SQL命令:然后就是SQL字符串是通过VBA函数执行

strSQL = "DELETE [TableName].* " _ 
    & "FROM [TableName] " _ 
    & "WHERE [TableName].[Run ID] NOT IN (SELECT [Run ID] FROM [SecondTableName] " _ 
    & "WHERE [Run ID] IS NOT NULL)" 

。我们在这个程序和数据库的其他地方使用这个函数几十次,所以我知道它不是这样。我也知道上面的SQL的工作原理是因为它工作了一年多,现在当我运行该语句时数据库挂起。表中没有无效的数据信息正在从中删除,我们先检查了这一点。我们也尝试过对数据库进行压缩和修复,因为我们担心这是数据库中的一种腐败现象,尽管这并不排除可能出现的情况。

感谢您的帮助,如果您有任何问题可以帮助您更好地了解此问题,请告知我们。

+3

我假设你已经尝试过一个'SELECT'版本的数据集,你试图删除并成功得到这个?两个表中的记录数量都发生了显着变化? – ashareef 2014-11-05 21:56:28

+0

@ashareef是的,我可以打开表格,然后我可以一次删除一行或多行选择。对不起,这是我应该添加到最初问题的重要信息。 – DotN3TDev 2014-11-06 14:47:38

回答

0

我不幸没有一个具体的这个是什么错误的答案给你,但我会写出我将如何处理调试。这可能是非常明显的,你已经测试过,但我是一个双重检查即使是最微不足道的东西的支持者。即使SQL没有变化,检查SQL的原因不是检查SQL的有效性,而是要确定数据库端是否没有任何更改(例如,大量新记录导致嵌套查询过大导致超时,表被锁定等)

检查查询SELECT [Run ID] FROM [SecondTableName] WHERE [Run ID] IS NOT NULL;,并确保它返回你所期望的。

检查查询DELETE [TableName].* "FROM [TableName] WHERE [TableName].[Run ID] IN (<put in a test value>);。这可能涉及一些测试记录

检查查询DELETE [TableName].* "FROM [TableName] WHERE [TableName].[Run ID] NOT IN (<put in a test values>);。这可能涉及制作表格的副本并使用该表格或在WHERE语句中添加其他条件,以便您可以在现有表格中使用测试记录。由于它在访问中,我只会复制副本,除非它非常大。

毕竟,如果你还没有发现任何问题,那么我很遗憾地没有想法。