"操作必须使用可更新的查询" MS Access中的错误

时间:2013-11-05 13:06:27

标签: ms-access

当我尝试运行SQL时,我收到一条错误消息:“操作必须使用可更新的查询”。根据我的理解,当在MS Access中的更新/删除查询中使用连接时会发生这种情况。但是,我有点困惑,因为我在我的数据库中有另一个查询几乎完全相同,工作正常。

这是我麻烦的问题:

UPDATE [GS] INNER JOIN [Views] ON 
    ([Views].Hostname = [GS].Hostname) 
    AND ([GS].APPID = [Views].APPID) 
    SET 
        [GS].APPID = [Views].APPID, 
        [GS].[Name] = [Views].[Name], 
        [GS].Hostname = [Views].Hostname, 
        [GS].[Date] = [Views].[Date], 
        [GS].[Unit] = [Views].[Unit], 
        [GS].[Owner] = [Views].[Owner];

正如我之前所说,我很困惑,因为我有另一个类似于此的查询,它运行得很好。这就是查询:

UPDATE [Views] INNER JOIN [GS] ON 
[Views].APPID = [GS].APPID 
SET 
    [GS].APPID = [Views].APPID, 
    [GS].[Name] = [Views].[Name], 
    [GS].[Criticial?] = [Views].[Criticial?], 
    [GS].[Unit] = [Views].[Unit], 
    [GS].[Owner] = [Views].[Owner];

我的第一个查询有什么问题?为什么第二个查询在第一个查询不起作用时会起作用?

12 个答案:

答案 0 :(得分:19)

这个答案是否普遍适用,我不知道,但我通过略微改变我的查询来解决这个问题。

我没有将select查询连接到表并对其进行处理,而是更改了select查询以创建临时表。然后我将该临时表用于真实表格,这一切都完美无缺。

答案 1 :(得分:18)

代码中没有错误,但由于以下原因引发错误:

 - Please check whether you have given Read-write permission to MS-Access database file.
 - The Database file where it is stored (say in Folder1) is read-only..? 

假设您将数据库(MS-Access文件)存储在只读文件夹中,而在运行应用程序时,连接不会强制完全打开。因此,更改文件权限/其包含文件夹权限,如C:\Program files所有所有c驱动器文件都设置为只读,因此更改此权限可解决此问题。

答案 2 :(得分:13)

尝试更新链接表时遇到了同样的错误。

问题是链表没有PRIMARY KEY。

在数据库端添加主键约束并重新链接此表以解决访问问题。

希望它会对某人有所帮助。

答案 3 :(得分:10)

我确实遇到了同样的问题,我不记得我喜欢这个解决方案,只是简单地添加DISTINCTROW解决了这个问题。

在您的代码中,它将如下所示:

UPDATE DISTINCTROW [GS] INNER JOIN [Views] ON <- the only change is here
    ([Views].Hostname = [GS].Hostname) 
    AND ([GS].APPID = [Views].APPID) 
 ...

我不确定为什么会这样,但对我来说,它完全符合我的需要。

答案 4 :(得分:3)

设置应用程序目录的权限解决了这个问题

要设置此权限,请右键单击App_Data文件夹(或您放入文件的其他文件夹),然后选择“属性”。查找“安全”选项卡。如果看不到,则需要转到“我的电脑”,然后单击“工具”并选择“文件夹选项...”,然后单击“视图”选项卡。滚动到底部并取消选中“使用简单文件共享(推荐)”。返回“安全”选项卡,您需要将相关帐户添加到“组或用户名”框中。单击添加....然后单击高级,然后单击立即查找。应列出相应的帐户。双击它以将其添加到“组或用户名”框,然后选中权限中的“修改”选项。而已。你完成了。

答案 5 :(得分:2)

要更新记录,您需要将更改写入磁盘上的.mdb文件。如果您的Web /共享应用程序无法写入磁盘,则无法更新现有记录或添加新记录。因此,在数据库文件夹中启用读/写访问权限或将数据库移动到您的应用程序具有写权限的其他文件夹....有关详细信息,请检查:

http://www.beansoftware.com/ASP.NET-FAQ/Operation-Must-Use-An-Updateable-Query.aspx

答案 6 :(得分:1)

我使用临时表,最后让它工作。以下是创建临时表后使用的逻辑:

UPDATE your_table, temp
SET your_table.value = temp.value
WHERE your_table.id = temp.id

答案 7 :(得分:1)

我使用UNC路径访问数据库,偶尔会抛出此异常。当我用IP地址替换计算机名称时,问题突然解决了。

答案 8 :(得分:0)

这是一个黑暗中的镜头,但尝试将AND的两个操作数放在括号中

开((A = B)和(C = D))

答案 9 :(得分:0)

我遇到了同样的错误,并且使用主键没有什么区别。问题是该表是链接的Excel表。我知道可以更改此设置,但是我的IT部门已锁定此设置,因此我们无法更改。相反,我从链接表创建了一个make表,并在更新查询中使用了它,并且该表起作用了。请注意,查询中也链接到同一Excel链接表的任何查询都将导致相同的错误,因此您也需要更改它们,以使它们不会直接链接到Excel链接表。 HTH

答案 10 :(得分:0)

如果要更新,则必须删除IMEX = 1。 ;)

“ IMEX = 1;告诉驱动程序始终将” 混合“(数字,日期,字符串等)数据列读取为文本。请注意,此选项可能会影响excel工作表写入访问权限。” https://www.connectionstrings.com/excel/

答案 11 :(得分:-4)

UPDATE [GS] INNER JOIN [Views] ON 
([Views].Hostname = [GS].Hostname) 
AND ([GS].APPID = [Views].APPID) <------------ This is the difference 
SET 
    [GS].APPID = [Views].APPID, 
    [GS].[Name] = [Views].[Name], 
    [GS].Hostname = [Views].Hostname, 
    [GS].[Date] = [Views].[Date], 
    [GS].[Unit] = [Views].[Unit], 
    [GS].[Owner] = [Views].[Owner];