MS Access列表框SQL查询用IIF转换字段值触发报错求助
报错原因
你写的IIF条件判断逻辑本身没有问题,触发语法错误的核心原因是:计算字段的别名Effectif Contractualisé包含空格和法语重音特殊字符,Access SQL无法直接识别未加界定符的特殊标识符,因此抛出标点/拼写错误提示。
额外提示:你最初写的查询同时保留了存储0/1值的原始字段SALARIE_effectif_contractualise和转换后的文本字段,绑定到列表框后会多出一列冗余的数值列,不符合预期展示效果。
修复方法
- 对包含空格、特殊字符的字段别名,使用Access SQL规定的*方括号
[]*包裹,让数据库引擎正确识别标识符边界 - 如果不需要在列表框中展示原始的0/1数值,可以直接用
IIF转换表达式替换原有的数值字段,无需额外新增计算列,避免冗余列出现
修正后可直接运行的SQL
SELECT T_SALARIE_EMPLOI.SALARIE_EMPLOI_id, T_SALARIE_EMPLOI.SALARIE_EMPLOI_salarie_nni, T_SALARIE.SALARIE_nom, T_SALARIE.SALARIE_prenom, T_SALARIE_EMPLOI.SALARIE_EMPLOI_date_fin_emploi_actuel, IIF(T_SALARIE.SALARIE_effectif_contractualise = 1, 'Oui', 'Non') AS [Effectif Contractualisé] FROM T_EMPLOI INNER JOIN (T_SALARIE INNER JOIN T_SALARIE_EMPLOI ON T_SALARIE.SALARIE_NNI = T_SALARIE_EMPLOI.SALARIE_EMPLOI_salarie_nni) ON T_EMPLOI.EMPLOI_identifiant = T_SALARIE_EMPLOI.SALARIE_EMPLOI_emploi_identifiant WHERE (((T_SALARIE_EMPLOI.SALARIE_EMPLOI_statut_id)=2) And ((T_SALARIE_EMPLOI.SALARIE_EMPLOI_emploi_identifiant)=Forms!F_Vue_Emploi.Form!EMPLOI_identifiant));
如果你需要保留原始0/1字段用于后续窗体逻辑判断,只需把原字段加回SELECT子句即可,只要确保计算列的别名始终用方括号包裹就不会触发语法错误。
内容的提问来源于stack exchange,提问作者Kais
相关产品推荐
相关产品推荐

