访问链接到 SQL:为新创建的记录显示错误的数据
Posted
技术标签:
【中文标题】访问链接到 SQL:为新创建的记录显示错误的数据【英文标题】:Access Linked to SQL: Wrong data shown for a newly created record 【发布时间】:2015-09-24 12:11:56 【问题描述】:我在 Access (2013) 中使用链接到 SQL 数据库的表。主键是包含 GUID 的列“RowId”。
当我向表中添加新记录时,我将 RowId 留空。记录被插入到 SQL 数据库中,但是添加的记录被另一条记录的数据填充。
在使用 SQL Server Profiler 调查问题后,我发现会发生这种情况:
首先,处理一条 INSERT 语句:
exec sp_executesql
N'INSERT INTO "table" ("column1","column2", column4")
VALUES (@P1,@P2,@P3)',
N'@P1 int,@P2 nvarchar(50),@P3 nvarchar(50)',
3438,
N'Smith',
N'Sofia'
然后,传递了第二条语句,以获取保存记录的值(我猜):
declare @p1 int
set @p1=5
exec sp_prepexec
@p1 output,
NULL,
N'SELECT "column1","column2", column3","column4","column5", column6",
"RowID","RV" FROM "table" WHERE "RowID" IS NULL'
select @p1
在创建记录时最初没有给出 RowID,所以现在 Access 要求 RowId 为 NULL 的行。这发生了两次,并且失败了两次。然后,插入语句中给出的参数询问 RowId:
exec sp_executesql
N'SELECT "table"."RowID"
FROM "table"
WHERE "column1" = @P1 AND "column2" = @P2 AND "column4" = @P3',
N'@P1 int,@P2 nvarchar(50),@P3 nvarchar(50)',
3438,
N'Smith',
N'Sofia'
如果存在另一个具有相同参数的记录(例如3438,Smith,Sofia),则返回该记录的RowID,并且Access中的新记录使用来自该其他记录的数据填充(包括错误的RowID )。现在,对该记录的每项操作都是在错误的记录上进行的,因为语句中给出了错误的 RowID。刷新表格后,新插入的记录会显示出来,其中包含正确的数据和新生成的 RowID。
如何防止这种情况发生?如何在插入行后立即显示正确的数据?
【问题讨论】:
您使用的是直通查询吗?为什么不直接使用 vba 插入行? 正如@krishKM 所说:只需使用DAo,就像它是一个Access 表一样。我知道 IT 人员总是认为应该通过 SP 完成惰性/更新,但是为什么要使用 Access 呢?只需将预算乘以 10 并使用 Visual Studio+SP 这听起来非常接近我几年前提交的支持事件。基本上,他们知道并且不在乎。有关可能对您的情况有所帮助的一些可能的想法,请参阅此线程:groups.google.com/forum/#!original/comp.databases.ms-access/… 【参考方案1】:我怀疑 Access 不知道 RowId
是主键,或者它(或 ODBC 驱动程序)无法正确处理 GUID 数据类型。
如果您在设计视图中打开链接表,Access 会为RowId
显示什么数据类型?它是否显示主键的“键”图标?
在对Recommendations on using SQL Server GUID from MS Access 的评论中,David-W-Fenton(他对这些事情了解很多)写道:
如果您的前端在 Access 中,则在处理 GUID 时会出现重大问题:http://www.trigeminal.com/usenet/usenet011.asp?1033
很遗憾,此页面已关闭。编辑 archive.org 进行救援:INFO: Replication and GUIDs, the Good, the Bad, and the Ugly 虽然这似乎是关于 Jet GUID,而不是 SQL Server,但可能不适用。
关于 GUID 的更多信息:What are the best practices for using a GUID as a primary key, specifically regarding performance?
【讨论】:
以上是关于访问链接到 SQL:为新创建的记录显示错误的数据的主要内容,如果未能解决你的问题,请参考以下文章