3

好的,这里的情况
让我们有 Table1(A,B,C)
A 是一个自动编号字段。

我正在通过 vba 喂表。
由于 A 是自动编号的,所以我像这样忽略它:

SQL = INSERT INTO TABLE1(B,C) VALUES ('something','something else')
DoCmd.RunSQL SQL

这工作正常,访问给了我第一个警告,我将创建一个新行。
这对我来说没问题。然而就在那之后我得到了这个:

Microsoft Access 无法在更新或追加查询中添加所有记录。
由于类型转换失败,它将 1 个字段设置为 Null。
blahblahblah 单击确定以运行查询

如果我单击确定,这不会阻止它工作,但我不希望我的用户看到该警告。
无论如何它为什么会弹出?将自动编号字段留空不是很正常吗?
还有其他我不知道的程序吗?我错过了什么?

我环顾谷歌和这里但找不到答案:/

(我不想将警告设置为 false,因为我希望添加字段的第一个警告和任何其他最终错误可见。)

4

3 回答 3

6

Microsoft Access 无法在更新或追加查询中添加所有记录。由于类型转换失败,它将 1 个字段设置为 Null。

该错误与您的自动编号字段无关。检查字段 B 和 C 的数据类型。

在此示例中,字段 C 设置为数字,因此我收到与您相同的错误,并且 INSERT 成功,但字段 C 中为 Null:

DoCmd.RunSQL "INSERT INTO TABLE1(B,C) VALUES ('something','something else')"

但是,将数值插入字段 C 可以正常工作。

DoCmd.RunSQL "INSERT INTO TABLE1(B,C) VALUES ('something',99)"

编辑:尽管为字段 C 提供了文本值,这也可以工作。不同之处在于文本值是数据库引擎可以转换为有效数字的值:

DoCmd.RunSQL "INSERT INTO TABLE1(B,C) VALUES ('something','27')"
于 2011-02-15T16:58:02.827 回答
2

听起来您正在将一个空字符串传递给其中一个值,并将该列设置为 NULL。

当你说

如果我单击确定,这不会阻止它工作

是否所有字段都正确填充?包括自动编号?

于 2011-02-15T15:54:42.770 回答
2

显然是由于自动编号字段吗?添加记录后(单击“仍然运行”运行查询),只有自动编号字段为空白?

自动编号不应发生此错误;至少,我以前从未见过。

于 2011-02-15T15:51:18.280 回答