Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何修复';操作必须使用可更新的查询';在Access DB中,当查询简单且没有链接表时_Sql_Ms Access - Fatal编程技术网

Sql 如何修复';操作必须使用可更新的查询';在Access DB中,当查询简单且没有链接表时

Sql 如何修复';操作必须使用可更新的查询';在Access DB中,当查询简单且没有链接表时,sql,ms-access,Sql,Ms Access,我在stackoverflow上搜索了此错误消息,但没有其他情况/答案适用于我:数据库中的每个表都有主键,数据库没有链接表,查询非常简单。更重要的是,可能更重要的是,查询通常有效,但有时无效;如果查询失败,我通常会再试一次(几乎立即),然后它通常会工作(如果没有,我只会重试几次,最终它会再次工作) 下面是我正在使用的查询类型的一个示例: INSERT INTO GbpEx (GbpExDate,Currency,CurrencyID,GbpExRate) VALUES (43131,2,1,13

我在stackoverflow上搜索了此错误消息,但没有其他情况/答案适用于我:数据库中的每个表都有主键,数据库没有链接表,查询非常简单。更重要的是,可能更重要的是,查询通常有效,但有时无效;如果查询失败,我通常会再试一次(几乎立即),然后它通常会工作(如果没有,我只会重试几次,最终它会再次工作)

下面是我正在使用的查询类型的一个示例:

INSERT INTO GbpEx (GbpExDate,Currency,CurrencyID,GbpExRate) VALUES (43131,2,1,1331)
所以它非常简单,没有子查询,也没有链接表。表GbpEx有一个主键(我的所有表都有一个主键)。查询通常有效,但有时无效

它不仅仅是插入;更新查询也会失败(稍后会再次工作)

这是我的设置:我有一个Excel应用程序,通过网络连接到Access数据库。Access数据库没有拆分,只包含表和查询——没有宏,没有VBA,什么都没有。当用户启动Excel应用程序时,该应用程序所做的第一件事就是向数据库写入更新,以记录用户启动应用程序的时间。通常情况下,这样做很好,用户可以继续使用该应用程序;有时此更新失败(上面有错误消息),因此用户尝试了两三次,最终没有错误,应用程序按预期工作。有时,应用程序在运行中失败(使用不同的查询,例如上面的查询),并出现错误,应用程序停止;然后用户再试一次,一切正常

通常大约有10个用户,我所见过的最多只有20个。每次应用程序想要与数据库交互时,它都会建立连接,执行交互,然后关闭连接--我会尽快关闭连接,以减少数据库和网络上的负载

恐怕我不能可靠地再现这个错误

还有一点:我认为这可能是数据库中的某种临时只读设置,所以我尝试将Access accdb文件设置为只读。当我单步执行并且执行进入我的错误处理例程时,错误与上面列出的错误相同,但有一个重要的区别:我的错误处理例程也写入数据库,因此进入无限循环但是正常错误不会进入无限循环,因此,如果问题是因为Access accdb文件变为只读,则会持续几分之一秒(即在执行进入错误处理程序时变为可写)

在有人提出SQL Server之类的建议之前——是的,我们计划在不久的将来进行迁移,但不是现在。我想确保这个问题不会转移到另一个数据库

有人有什么想法吗

编辑:我还应该提到一些事情:

这个Excel应用程序几个月来一直运行良好,而且(在过去几周内)才开始显示这种行为。我们还必须处理错误
查询“”已损坏
,这显然是由11月下旬的Windows更新引起的,但我们在Office上使用了修复,它消失了(我怀疑我们是在MS修复问题的准确时刻这样做的)

我也尝试了
DISTINCTROW
方法,但没有解决它


我必须强调的是,所有的插入和更新都是非常简单和直接地编辑一个表——没有链接表,根本不涉及子查询,没有
内部连接
,什么都没有。它们大部分时间都能工作,有时也会失败。

“通过网络访问数据库”:尽管你在最后一段中提到了这一点,但我还是要说……虽然Access是小型项目的好玩具,但如果你打算过上一辈子,我只能推荐像SQL这样的真正的数据库。我有很多出乎意料的奇怪行为,如果微软推出更新,他们会非常专业可能要确保将所有内容更新到最新版本(或不更新,取决于Microsoft)。•
GbpEx
是链接表还是视图?您可能想看看这里:GbpEx是普通表;对数据库的任何写入都不会写入视图,也没有链接的表。感谢您提出的链接问题,但我以前看到过,所有答案都不适用于我的情况--我正在尝试直接使用值更新表,而不是在INSERT或update中使用SELECT,并且我没有链接的表。唯一可能适用于我的情况的是DISTINCTROW,我上周尝试了它,但没有帮助(对不起,我应该提到这一点)。但是谢谢你的建议。听起来像是锁。可能工作负载(或应用程序中的某些内容)已发生变化,因此这种情况更频繁。我也不会使用Access作为10-20个用户的后端,我也不会投入太多时间,而是用它来规划迁移。