Chr*_*n M 3 sql ms-access vba access-vba ms-access-2010
好的,这是情况
让我们有Table1(A,B,C)
A是一个自动编号字段.
我正在通过vba喂餐桌.
由于A是自动编号,我忽略了它:
SQL = INSERT INTO TABLE1(B,C) VALUES ('something','something else')
DoCmd.RunSQL SQL
Run Code Online (Sandbox Code Playgroud)
这工作正常,访问给我第一个警告,我将创建一个新行.
哪个对我好 然而就在那之后我得到了这个:
Microsoft Access无法在更新或追加查询中添加所有记录.
由于类型转换失败,它将1个字段设置为Null.
blahblahblah点击确定无论如何都要运行查询
如果我单击确定,这不会阻止它工作,但我不希望我的用户看到该警告.
无论如何它会弹出来?将自动编号字段留空是不正常的?
还有其他我不了解的程序吗?我错过了什么?
我环顾谷歌和这里,但找不到答案:/
(我不想将警告设置为false,因为我想要添加字段的第一个警告以及任何其他可能的错误.)
Microsoft Access无法在更新或追加查询中添加所有记录.由于类型转换失败,它将1个字段设置为Null.
该错误与您的自动编号字段无关.检查字段B和C的数据类型.
在此示例中,字段C设置为number,因此我得到与您相同的错误,并且INSERT成功但在字段C中使用Null:
DoCmd.RunSQL "INSERT INTO TABLE1(B,C) VALUES ('something','something else')"
Run Code Online (Sandbox Code Playgroud)
但是,将数值插入字段C工作正常.
DoCmd.RunSQL "INSERT INTO TABLE1(B,C) VALUES ('something',99)"
Run Code Online (Sandbox Code Playgroud)
编辑:这个也可以在为字段C提供文本值的情况下工作.区别在于文本值是数据库引擎可以转换为有效数字的值:
DoCmd.RunSQL "INSERT INTO TABLE1(B,C) VALUES ('something','27')"
Run Code Online (Sandbox Code Playgroud)