如何修复此 Access 2003 错误?数据输入自动生成值

Posted

技术标签:

【中文标题】如何修复此 Access 2003 错误?数据输入自动生成值【英文标题】:How can I fix this Access 2003 bug? Data Entry Auto-Generating a Value 【发布时间】:2011-12-21 18:26:51 【问题描述】:

我在 MS Access 中遇到了一个奇怪的数据输入错误,我希望有人可以帮助解释为什么会发生这种情况以及如何解决它。

我有一个在我们的 SQL Server 数据库中定义的数据表。定义如下,仅更改了字段名称。

CREATE TABLE [dbo].[MyTable](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [TextField1] [nvarchar](10) NOT NULL,
    [TextField2] [nvarchar](50) NOT NULL,
    [Integer1] [int] NOT NULL CONSTRAINT [DF_MyTable_Integer1]  DEFAULT (0),
    [Integer2] [int] NOT NULL,
    [LargerTextField] [nvarchar](300) NULL
) ON [PRIMARY]

从这个表的定义可以看出,它并没有什么特别之处。我遇到的问题是 MS Access 2003 数据库中的链接数据表通过 ODBC 链接到该表。

在 SQL Server 中定义和创建数据表后,我打开了正在工作的 Access 数据库并链接到新表。我需要手动创建属于该表的记录。然而,当我开始添加数据行时,我注意到当我从LargerTextField 切换到新行时,LargerTextField 被默认为'2',即使我没有输入任何内容也没有输入在字段上定义了默认值?!

最初,我需要此字段为Null。我稍后会回来并使用更新例程填充数据。但是为什么 MS Access 会在我的字段中默认一个值,即使表的架构显然没有定义一个值?有没有人看到这个或知道为什么会发生这种情况?

编辑

快速更正,一旦我进入LargerTextField,值默认为'2',而不是当我退出时。细微的差别,但可能很重要。

作为测试,我还创建了一个新的、全新的 MS 数据库并链接了表。我有完全相同的问题。我认为这可能是 MS SQL Server 或可能是 ODBC 的问题。

【问题讨论】:

总是2吗? 2 来自其他地方吗? 我无法重现 Access 2010 和 SQL Express 2005/SP4 中的错误。希望有人会支持正确的访问版本。 @webturner-- 奇怪的是,我有很多表,我经常通过 ODBC 和访问来维护这些表。其中一些具有非常相似的模式,但我从未见过这种行为。我只能将这种行为称为“怪异”。我想不出这种行为有意义的任何上下文,除非我在该字段上有一个默认值。 【参考方案1】:

哇,问题解决了。这不是错误,但肯定不是我想要或预期的行为。

由于我在字段Integer1Integer2 中手动输入的数据,会出现这种情况。我手动输入0 作为Integer1 的值,并将1 输入Integer2。我从未见过 Access 自动假定我的数据输入,但它看起来像是在识别按顺序输入的数据。

作为测试,我输入了一条记录,其中Integer1 设置为1Integer2 设置为2。果然,当我进入LargerTextField 时,3 的值是自动填充的。

我讨厌这是由于用户无知而造成的问题,但老实说,在我使用 MS Access 的过去 10 多年中,我什至不记得曾经看到过这种行为。我几乎更愿意删除这个问题来挽回面子,但由于它让我措手不及,而且我是一位经验丰富的用户,我不妨将它留在 StackExchange 档案中,以供可能有相同经历的其他人使用。 :/

【讨论】:

我相信 Microsoft Excel 工作簿中也有类似的功能。如果您知道它在那里但没有太大用处,可能对数据输入有帮助。 我认为这也是我困惑的一部分。我也经常使用 Excel,电子表格中的这种行为非常有帮助。我已经在 Excel 中看到并使用了它,但我从未在 Access 中看到它。事实上,如果我没有考虑到 Excel 也有这种行为,我相信我不会注意到这个解决方案。 哇,我当然也没想到会这样。必须有一个设置来控制它。有时这些东西可能“太有用了”【参考方案2】:

作为一个实验,启动一个全新的 Access DB 并连接到该表,看看您是否得到相同的行为。我怀疑这个 Access DB 过去曾连接到这样的表并设置了默认值。访问有时会忘记 :)

【讨论】:

我非常怀疑这种情况,但可以肯定的是,我会试一试。我同时管理 SQL Server 数据库,这是我用于数据查询和更新的“帮助”访问数据库。我从来没有用这样的名字创建过一个表,更不用说链接了。不过,感谢您的快速回复。我会告诉你进展如何。 好的,我刚刚创建了一个新的数据库,并链接了表。相同的行为。这可能是 ODBC 或 SQL Server 的一个奇怪错误吗?

以上是关于如何修复此 Access 2003 错误?数据输入自动生成值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Access 2003 中实现版本控制?

ms access 2003 .mdb 无法查看表

当我引用其他表时,如何保存在 Access 2003 中的表单中创建的数据?

MS Access 2003 - 创建 MDE 文件失败:错误 VBA 已损坏?

在 MS Access 2003 上出现错误 (3163)

如何修复此错误:调用未定义的函数 odbc_connect() [重复]