使用 SQL Server 在 Access 中写入冲突

Posted

技术标签:

【中文标题】使用 SQL Server 在 Access 中写入冲突【英文标题】:Write Conflict in Access using SQL Server 【发布时间】:2013-03-07 12:11:13 【问题描述】:

本网站上的其他问题确实与我要问的问题非常接近,但我的问题略有不同(如果有人知道存在的问题恰好涵盖了这个问题,那么请指导我)。

我有 Windows Server 2003,上面有 SQL Server 2000(我认为)。在那个 SQL Server 上,我有 5 个数据库,其中四个是我目前使用的。现在,我还有一台笔记本电脑(win xp pro),上面安装了企业管理器的副本,我通过笔记本电脑维护 SQL 数据库,没有任何问题(通过网络,换句话说)。

我在笔记本电脑上还有一个带有 ODBC 链接的 Access 的“前端”,这样我就可以使用 Access 中的表单来查看 SQL 中表的内容。几个星期以来,我对这个设置没有任何问题(因为我实际上创建了数据库)。

但是,我在 Access 中遇到的问题是我能够更改其中两个数据库中的信息,但不能更改另外两个。当我尝试更改两个 NON 工作中的任何一个时,我得到一个“写入冲突 - 此记录已被另一个用户更改......”,但是我是唯一的用户!我正在使用 SQL Server 登录名,每次打开 Access 前端时都必须输入该登录名。这里发生了什么?我已经阅读了有关时间戳字段的内容,但我不明白为什么我可能必须实施或实际上如何实施?这个问题快把我逼疯了!

【问题讨论】:

【参考方案1】:

您正在修改的表在两个不起作用的数据库中是否具有正确的主键?我问的原因是,如果 Access 无法确定您正在更新的确切记录(由于缺少主键或其他唯一字段),它通常会给出“写入冲突”错误。正如您所提到的,当出现此问题时,人们通常会建议使用时间戳字段,但根据我的经验,这仅在处理 Access 和 mysql 时有所帮助,而不是 SQL Server。

另外,您使用的是哪个版本(和服务包)的 Access?

【讨论】:

所有四个表都有主键,但不确定“正确”主键是什么意思。不过,我之前确实遇到过 Access 的问题,Access 中的表单会显示为空白,没有字段,直到我为表创建主键并解决了问题。我正在使用 Access 2000(是的,我知道它不是最新的),但这显然不会导致问题,因为为什么它适用于其中两个表而不是其余表。所有的表都在同一个 SQL 服务器实例下。 另外,两个不起作用的表具有整数键,而两个表具有字符键。看不出这是个问题,但通过将其中一个从 int 更改为 char 进行了测试,但没有解决任何问题,因此将其改回来。 对不起,正确的词不应该在那里,我只是说主键。 :) Access 2000 和 SQL Server (link) 中的位和浮点字段也存在问题。这些是否适用于导致问题的 2 个表? 事实证明这两个问题表中确实有位字段,但是,我刚刚检查了四个表中的最后一个(其中一个恰好没问题),它也有位字段。所以这似乎不是问题。该死的,我以为你在那儿有什么东西。 您是否还检查了导致问题的具有位字段的位字段实际上在位字段中具有值?您需要使用SELECT * FROM <<TABLE_NAME>> WHERE <<BIT_FIELD>> IS NULL 之类的东西从 SQL 查询设计器(而不是 Access)中进行检查。如果您已经检查过,您还可以阅读 SQL 时间戳字段 here 并考虑尝试将其放入问题表中并在 Access 中重新链接以查看是否有帮助?【参考方案2】:

如果您有任何 BIT 字段,如果您正在对表进行更新,则必须在 BIT 字段中插入一个值,即“0”到每个字段中。它们不能为空。

【讨论】:

以上是关于使用 SQL Server 在 Access 中写入冲突的主要内容,如果未能解决你的问题,请参考以下文章

传递查询如何在Access中使用SQL Server数据库引擎进行查询

前端为access,后端为sql server

使用 SQL Server 在 Access 中写入冲突

在使用SQL Server后端的Microsoft Access中使用查找对话框时性能下降

需要在 MS Access 中使用链接表更改 sql server 数据库名称

将查询从 SQL Server 转换为 Access 2000