2

我在 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 的问题。

4

2 回答 2

2

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

由于我在字段中手动输入的数据Integer1Integer2. 我手动输入 a0作为Integer1和 a1的值Integer2。我从未见过 Access 自动假定我的数据输入,但它看起来像是在识别按顺序输入的数据。

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

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

于 2011-12-21T18:54:48.497 回答
1

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

于 2011-12-21T18:30:04.577 回答