访问更新查询不更新数据

Posted

技术标签:

【中文标题】访问更新查询不更新数据【英文标题】:Access Update query doesn't update the data 【发布时间】:2021-12-30 00:47:27 【问题描述】:

这是最简单的更新。

访问前端、SQL 后端、链接表。

UPDATE Available SET Status = 'New'
WHERE ((SerialNumber)='HAJ1376');

运行没有错误,但返回 1 条记录显示“已使用”

SELECT [Status], * FROM Available
WHERE SerialNumber =  'HAJ1376';

还返回“已使用”。

请注意,我是否通过字符串 SerialNumber 或数字 ID 进行更新或选择并不重要。

从 SSMS 运行相同的查询会正确更改数据。 这似乎适用于任何表上的任何字段。我无法从 Access 更新任何内容。

这个系统在生产中运行良好,只是在我的开发机器上失败了。

我回到了产品备份,但它仍然会发生,所以我不应该对数据库进行任何更改。与旧版本的代码相同。

我尝试删除并重新创建与表的连接、重新启动、停止和重新启动 SQL、修复 Office。

连接字符串是

DRIVER=SQL "Server;SERVER=WORKPC\SQLEXPRESS;DATABASE=mydatabase;Network=DBMSSOCN;Trusted_Connection=No"

区别:

prod 使用的是完整的 SQL,而我使用的是 express。 数据库在本地而不是在专用机器上。 我使用的是 accdb 而 prod 是 accde。

访问 365,v16.0.13801.21072,64 位 MS-SQL Server 2017,14.0.1000.169,速成版,64 位 Windows 10 家庭版 10.0、X64、内部版本 19042

【问题讨论】:

我相信它正在读取正确的记录,因为我可以更改 SQL 中的值并在 Access 中查看它。 Trusted_Connection=No 并且没有 UID/PWD 详细信息?访客帐户是否有权更新? 如果打开链接表可以编辑一行数据吗?首先检查一下,看看链接表是否允许更新。如果 Access UI 中的链接表不起作用,那么您的更新也将不起作用。所以尝试通过双击该链接表来编辑一行 - 查看是否允许编辑。 【参考方案1】:

在快速测试中,生成了非直通更新查询的访问查询设计器

UPDATE dbo_Available SET dbo_Available.Status = "Used"
WHERE (("SerialNumber"='HAJ1376'));

这导致 Access 将以下内容发送到 SQL Server 以获取受影响的键值:

SELECT "dbo"."Available"."SerialNumber" FROM "dbo"."Available" WHERE NOT((0 = 0 ) ) 

它没有返回任何结果,因此影响了 0 行。它没有很好的文档记录,但我没有看到 Access (JET) SQL 使用 " 作为分隔标识符的任何地方。所以看起来像 Access 查询设计器 wierdness/bug/limitation。

但是更新更新查询的SQL到

UPDATE dbo_Available SET dbo_Available.Status = 'New'
WHERE SerialNumber='HAJ1376';

工作。访问第一次运行

SELECT "dbo"."Available"."SerialNumber" FROM "dbo"."Available" WHERE ("SerialNumber" = 'HAJ1376' ) 

然后是 RPC 调用

declare @p1 int
set @p1=1
exec sp_prepexec @p1 output,N'@P1 varchar(200)',N'SELECT "SerialNumber","Status"  FROM "dbo"."Available"  WHERE "SerialNumber" = @P1','HAJ1376'
select @p1

更新行。

【讨论】:

所以看起来问题在于原始查询引用了 SQL Server Express 表名,而不是 Access 中的默认链接表名(即,以 dbo_ 开头)。对吗? "SerialNumber"='HAJ1376' 没有意义,也不在问题中。 [SerialNumber]='HAJ1376' 会起作用。

以上是关于访问更新查询不更新数据的主要内容,如果未能解决你的问题,请参考以下文章

更新查询以从 Microsoft 访问数据库中读取

在具有文本数据类型的访问数据库中更新查询

访问数据库 - 操作必须使用可更新的查询。 (在本地工作正常)

在 asp.net(访问数据库)中编写更新查询(visual basic)

访问:使用子查询中的计数更新查询 - 错误或所有结果

更新查询的 MS Access SQL 错误