访问更新查询不更新数据
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'
会起作用。以上是关于访问更新查询不更新数据的主要内容,如果未能解决你的问题,请参考以下文章
访问数据库 - 操作必须使用可更新的查询。 (在本地工作正常)