从Access 2016升级至Access M365后查询表达式失效原因咨询
Access M365表达式失效相关调整说明
你使用的IIf(IsNull([BeginTimeOff]),"",CDate(Left([BeginTimeOff],8)))表达式在Access M365中失效,是由以下3项功能调整导致的:
- 表达式返回值类型校验收紧:Access 2016允许IIf的两个分支返回不同数据类型(空值分支返回字符串、非空分支返回日期类型),会自动做隐式兼容。M365新增了表达式返回值类型一致性校验,分支返回类型不一致会直接触发表达式运行错误。
- CDate函数入参规则调整:Access 2016中CDate可自动兼容非严格匹配的时间格式入参,M365要求入参必须完全匹配系统区域设置的时间格式规则,若系统区域设置不默认识别
HH:MM:SS格式的字符串,会直接返回转换错误。 - 字符串截取函数隐式转换规则变更:若[BeginTimeOff]字段是日期/时间类型而非文本类型,Access 2016会自动将其转换为文本后执行Left截取,M365取消了该隐式转换逻辑,Left作用于日期类型字段时会返回数值格式的异常结果,导致后续CDate转换失败。
修复方案
方案1:统一返回日期类型(适合后续需做时间计算的场景)
IIf(IsNull([BeginTimeOff]), Null, CDate(Left(CStr(Nz([BeginTimeOff], "")), 8)))
方案2:统一返回文本类型(适合直接展示为长时间格式的场景)
IIf(IsNull([BeginTimeOff]), "", Format(CDate(Left(CStr(Nz([BeginTimeOff], "")), 8)), "Long Time"))
内容的提问来源于stack exchange,提问作者user3033348
相关产品推荐
相关产品推荐

