Access执行SQL INSERT报缺必填参数的语法(引号/方括号)问题咨询
问题根因
Access SQL触发HResult=0x80040E10 No value given for one or more required parameters报错的核心逻辑是:SQL语句中出现了无法识别为表字段、SQL关键字的未包裹标识符,Access会将其判定为待赋值的命名参数,找不到传入的参数值就抛出该错误。
你当前的语句存在的核心问题是仅为含空格的Tipo B、保留字In加了单引号,但其余所有文本类型的字面量值都未加单引号包裹,被Access误识别为字段/参数名,具体漏包裹的值包括:
RDDescrizioneTRONCHETTI_RAME_12.IPToransen
修正方案
所有文本类型的字面量值,无论是否包含空格、是否为保留字,都需要用单引号包裹;数字、布尔、日期类型值按对应规则书写即可。修正后的语句如下:
sSqlInsert = "Insert into GruppoColl Values (12343009,TRUE,'30/06/2022 11:57:35','RD','Descrizione','TRONCHETTI_RAME_12.IPT',20050082,'Tipo B','Bombato',0,'oransen','In')"
最佳实践
- 不建议使用省略字段列表的INSERT写法,显式指定要赋值的字段名,可避免表结构调整、字段顺序变动导致的值赋值错位问题,标准写法示例:
INSERT INTO GruppoColl (字段1, 字段2, 字段3 /* 按顺序列出所有要赋值的字段名 */) VALUES (对应顺序的赋值) - 仅当字段名/表名包含空格、为SQL保留字时,才需要用方括号
[]包裹标识符(即表名、字段名),文本类型的赋值统一用单引号包裹即可,二者适用场景不要混淆。
内容的提问来源于stack exchange,提问作者Owen Ransen
相关产品推荐
相关产品推荐

