ACC2000: 链接 SQL Server 表中的新行消失,或重复显示最后一条记录

文章翻译 文章翻译
文章编号: 251289 - 查看本文应用于的产品
本文的发布号曾为 CHS251289
本文已归档。它按“原样”提供,并且不再更新。
中级用户: 需要基本的宏、编程和互操作性技巧。

本文仅适用于 Microsoft Access 数据库 (.mdb)。

展开全部 | 关闭全部

本文内容

症状

向链接 Microsoft SQL Server 表中添加新记录,并移到另一条记录时,可能会出现以下某种异常情况:
在表中输入新记录的任何部分后按 TAB 键移动到下一条新记录,刚刚键入的记录消失。 在表中键入完整的新记录并移动到某现有记录时,刚键入的记录消失。 在表中只键入新记录的部分数据,然后将记录移到现有记录时,新记录消失,在表中显示的最后一条记录似乎重复了。 在窗体中键入记录的任何部分,然后将光标移到其它地方,刚键入的信息消失。
重要说明: 数据实际上没有丢失。 请不要再次添加该记录,它已经存在。 请不要删除明显重复的记录。 如果删除,删除的是原来的记录,即被重复的记录,而不是您刚添加的记录。

原因

如果 SQL Server 表有标识列,当您试图添加记录时,看到的记录好象和上一条记录相同。 如果您不刷新记录集,则新记录不能显示正确的数据。 该现象与 Microsoft Access 重新查询 SQL Server 数据库的方式有关。

解决方案

要解决此问题,可使用以下 3 种方法之一:

使用 Access 项目



您可使用 Access 项目,而不是使用 Access 数据库。 通过使用 Access 项目,您不需要将链接表连接到 SQL Server 数据库。

有关如何将 Access 数据库转换成 Access 项目的其它信息,请单击以下文章编号,查看相应的 Microsoft Knowledge Base 文章:
241743 ACC2000: "Access 2000 Upsizing Tools" White Paper Available in Download Center
250616 ACC2000: 如何使用数据转换服务 (DTS) 将数据从 Microsoft Access 数据库移至 SQL Server 数据库

使用 Access 数据库中的窗体



如果在窗体中发现这种现象,请使用 Microsoft Visual Basic for Applications 的 BeforInsert 和 AfterInsert 事件代码来自动重新查询数据,并将窗体移到刚添加的记录中。 下面是范例代码,您可将该代码添加到事件中,以自动刷新窗体中的记录。

备注: 采用这种方法,您会发现需要两次操作才能将光标从新记录上移开。 就是说,当您添加了新记录,并按 TAB 键或某个记录定位按钮来添加另外一条新记录或移动到上一条记录时,您必须再按一下记录定位按钮,才能让光标定位到您希望的记录。 该现象不影响窗体的关闭。
Option Compare Database
Option Explicit

Dim mfRequery As Boolean

Private Sub Form_AfterInsert()

    If mfRequery = True Then
        ' If the variable indicates a Requery
        ' is needed, Requery the form.
        Me.Requery
        ' Move back to the record that was just added
        DoCmd.GoToRecord acDataForm, Me.Name, acLast
        mfRequery = False
    End If

End Sub

Private Sub Form_BeforeInsert(Cancel As Integer)

    If Me.NewRecord = True Then
        ' If this is a new record, set a variable
        ' to indicate the need to Requery.
        mfRequery = True
    End If
    
End Sub

使用 MDB 中的表



如果您在表中发现这种现象,可手动重新对表进行排序,或者关闭并重新打开该表。

状态

Microsoft 已经确认这是本文开头所列出的 Microsoft 产品本身的问题。

更多信息

重现问题的步骤



  1. 打开样例数据库 Northwind.mdb。
  2. 将 Orders 表导出到一现有的 SQL Server 数据库。 将它命名为 OrdersTest
  3. 创建一个新的 Access 数据库。
  4. 在新数据库中,创建一个新的链接表,使它链接到已导出到 SQL Server 的 OrdersTest 表。
  5. 建立链接后,打开该表。
  6. 向下滚动到最后一条记录。
  7. 在新记录行,键入一新记录。
  8. 键入所有数据后,按上箭头键将光标从新记录上移开。
  9. 您会发现新记录不再显示,但最后一条记录出现了两次。
  10. 记录菜单上,单击重新查询。 您会发现重复情况消失。

属性

文章编号: 251289 - 最后修改: 2013年10月20日 - 修订: 1.0
这篇文章中的信息适用于:
  • Microsoft Access 2000 标准版
关键字:?
kbnosurvey kbarchive kbdta kbprb kbpending KB251289
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com