Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 什么会导致“偶发性”事件-2147352567数据已更改”;错误?_Ms Access_Ms Access 2010 - Fatal编程技术网

Ms access 什么会导致“偶发性”事件-2147352567数据已更改”;错误?

Ms access 什么会导致“偶发性”事件-2147352567数据已更改”;错误?,ms-access,ms-access-2010,Ms Access,Ms Access 2010,我们的一个表单不断地偶尔生成此错误消息。该问题发生在我们的订单上,该订单绑定到链接的SQL Server 2008表。打印通知单(使用报告)后,订单状态设置为“已打印订单”。此时,我偶尔会看到一个“-2147352567数据已更改”错误。我想说,95%的时候,这种情况并没有发生,但另5%的情况让我们头疼(还有无数的支持电话) 奇怪的是,关闭表单并尝试对订单执行相同的操作会导致相同的错误消息,但关闭数据库并重试效果良好 就好像表单绑定到的表/记录中有一些未提交的更改,即使没有打开表单、报表等,这些

我们的一个表单不断地偶尔生成此错误消息。该问题发生在我们的订单上,该订单绑定到链接的SQL Server 2008表。打印通知单(使用报告)后,订单状态设置为“已打印订单”。此时,我偶尔会看到一个“-2147352567数据已更改”错误。我想说,95%的时候,这种情况并没有发生,但另5%的情况让我们头疼(还有无数的支持电话)

奇怪的是,关闭表单并尝试对订单执行相同的操作会导致相同的错误消息,但关闭数据库并重试效果良好

就好像表单绑定到的表/记录中有一些未提交的更改,即使没有打开表单、报表等,这些更改也会存在

代码如下所示:

Select Case Me.txtCurrentStatus
  Case NEW_ORDER, UNPRINTED_ORDER:
    Me.txtCurrentStatus = PRINTED_ORDER
End Select
'Commit changes
If Me.Dirty = True Then Me.Dirty = False

@iDevelop实际上促使我考虑向表中添加时间戳,因此我只接受部分积分;)

简而言之-在Microsoft Access中使用链接表时,如果表中不包含类型为timestamp的列,Access将比较表中的每一列,以查看自检索记录以来数据是否已更改。Access无法可靠地检查几种数据类型(请参阅下面的文章)。只需添加类型为timestamp的列即可更改此行为,相反,Access仅会检查行版本是否已更改。。。这使得该检查更加可靠,并提高了性能

奇怪的是,这根本不是一个时间戳——它是一个rowversion,但在我使用的SQL Server 2008中,rowversion无法通过GUI获得

Office Access链接表中出现可更新性问题的主要原因可能是Office Access无法验证服务器上的数据是否与正在更新的动态集上次检索到的数据匹配。如果Office Access无法执行此验证,它将假定服务器行已被其他用户修改或删除,并中止更新

有几种类型的数据Office Access无法可靠地检查匹配值。其中包括大型对象类型,如SQL Server 2005中引入的文本ntext图像、以及varchar(max)nvarchar(max)varbinary(max)类型。此外,浮点数字类型(如实数浮点)存在舍入问题,这会导致比较不精确,从而在值没有真正更改时取消更新。Office Access还无法更新包含无默认值且包含空值的位列的表

解决这些问题的一种简单快捷的方法是在SQL Server上的表中添加一个timestamp列。时间戳列中的数据与日期或时间完全无关。相反,它是一个二进制值,保证在整个数据库中是唯一的,并且在每次向表中的任何列分配新值时自动增加。此类型列的ANSI标准术语为rowversion。SQL Server中支持此术语

Office Access会自动检测表何时包含此类列,并在影响该表的所有UPDATEDELETE语句的WHERE子句中使用该列。这比验证所有其他列是否仍具有上次刷新动态集时的相同值更有效


@iDevelop实际上促使我考虑向表中添加时间戳,因此我只接受部分积分;)

简而言之-在Microsoft Access中使用链接表时,如果表中不包含类型为timestamp的列,Access将比较表中的每一列,以查看自检索记录以来数据是否已更改。Access无法可靠地检查几种数据类型(请参阅下面的文章)。只需添加类型为timestamp的列即可更改此行为,相反,Access仅会检查行版本是否已更改。。。这使得该检查更加可靠,并提高了性能

奇怪的是,这根本不是一个时间戳——它是一个rowversion,但在我使用的SQL Server 2008中,rowversion无法通过GUI获得

Office Access链接表中出现可更新性问题的主要原因可能是Office Access无法验证服务器上的数据是否与正在更新的动态集上次检索到的数据匹配。如果Office Access无法执行此验证,它将假定服务器行已被其他用户修改或删除,并中止更新

有几种类型的数据Office Access无法可靠地检查匹配值。其中包括大型对象类型,如SQL Server 2005中引入的文本ntext图像、以及varchar(max)nvarchar(max)varbinary(max)类型。此外,浮点数字类型(如实数浮点)存在舍入问题,这会导致比较不精确,从而在值没有真正更改时取消更新。Office Access还无法更新包含无默认值且包含空值的位列的表

解决这些问题的一种简单快捷的方法是在SQL Server上的表中添加一个timestamp列。时间戳列中的数据与日期或时间完全无关。相反