我有一个访问数据库,该数据库具有从另一个访问数据库链接到它的表来保存数据。每日实验室管理员通过单击按钮运行一个过程,该过程将数据从此数据库传输到MS SQL Server数据库,然后从Access数据库中删除数据。我继承了这些数据库,没有时间或权力来改变数据库结构,我们将使用新的LIMS完全替换访问数据库,我们正在购买和实施明年的新LIMS。
我的问题是其中一个DELETE sql查询已停止执行。每当我执行此查询时,数据库就会挂断(让它长达20分钟),直到我拉出任务管理器并终止应用程序。我已经尝试将SQL查询从VBA环境中取出并通过MS Access查询运行它,我得到同样的东西。所以基本上它工作了很长时间(感觉去年8月),现在它已经停止工作了。
以下是Delete语句的SQL命令:
strSQL = "DELETE [TableName].* " _
& "FROM [TableName] " _
& "WHERE [TableName].[Run ID] NOT IN (SELECT [Run ID] FROM [SecondTableName] " _
& "WHERE [Run ID] IS NOT NULL)"
然后通过VBA中的函数执行sql字符串。我们在这个过程中以及数据库中的其他位置使用该函数数十次,如果不是一百次,所以我知道它不在那里。我也知道上面的SQL有效,因为它运行了一年多,现在当我运行该语句时数据库挂起。表中没有无效数据正在删除信息,我们首先检查了该信息。我们也尝试过对数据库进行压缩和修复,因为我们担心这是数据库中的损坏,尽管这并不能说明这一点,也可能是正在发生的事情。
感谢您的帮助,如果您有任何疑问可以帮助您更好地了解此问题,请与我们联系。
答案 0 :(得分:0)
我很遗憾没有具体的这个对你来说是错误的答案,但我会写出如何进行调试。这可能是非常明显的,你已经测试过,但我是双重检查甚至是最微不足道的事情的主要支持者。检查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
语句中添加另一个条件,以便您可以在现有表中使用测试记录。因为它在访问中我只会制作副本,除非它非常大。
毕竟如果你没有发现任何问题,那么我很遗憾没有想法。