MS Access是否自动将记录写回数据库?

时间:2014-10-30 08:47:40

标签: sql-server ms-access sql-server-2008-r2 ms-access-2010

我们在SQL Server 2008r2中有一个数据库,并且有两个用户界面:

  • 自定义界面,用C#/ .NET 4.0编写
  • Access数据库,它已“链接表格”到SQL Server数据库中的某些表

现在我们遇到了这个事件:

  1. 用户正在使用自定义界面删除某些记录,然后从数据库中创建一些报告。删除transacion是肯定的(报告创建中涉及一些工作,它们在不同的进程中运行,因此删除是肯定的)

  2. 在步骤1中,MS Access界面始终在同一台计算机上打开,显示删除前状态的表。 (默认情况下,Access不会自动刷新)。然后,同一个用户使用MS Access界面将一些记录添加到表中。

  3. 最后,经过几天,我们发现步骤1)中删除的记录已经恢复!

    我们已经详细跟踪了案例,还与数据库管理员进行了交谈,我们唯一可能的解释是MS Access接口可能已经回写了记录。这真的会发生吗?

1 个答案:

答案 0 :(得分:1)

使用Access表单编辑数据时,不需要保存,当您关闭表单,移动到另一条记录或显式强制保存数据时,会发生保存。

在你的情况下,似乎没有提交删除命令,或者没有执行删除命令。如果访问再次添加记录,您是否有自动编号PK? (这些数字会改变)。我假设你在这里有一些PK列,如果Access实际上重新添加并重新写出这些行,那么如果自动编号类型不同,那么PK键就会不同。

但是,要在您的背景下回答您的问题?

如果记录被删除,那么没有Access不会自动重新创建那些数据行,即使访问是为了尝试更新这些行,你也明确表示它们不存在,因此即使Access正在尝试自动将数据写回SQL服务器上的一行,这是不可能的,因为行不存在,并且Access更新这些行的任何命令都将失败。 Access不会发出INSERT命令,但会尝试UPDATE命令。

所以即使Access确实自动写回这些记录(除非它们被Access更改,否则它不会这样做)UPDATE命令会失败,因为你无法更新不再存在的数据行。

因此,INSERTING记录与UPDATING EXISTING记录的过程是一个非常不同的过程,如果这些行被删除,Access将不会知道这一点,并且将执行UPDATE命令,而不是INSERT命令。因此,访问UPDATE这些行的尝试将失败,因为它们不再存在。并且对于SURE Access来说,对于Access已经知道并假设存在的行,不会重新执行SQL插入命令。