Access 2019通过OLEDB访问时出现NULL值无效使用错误求助
强制处理子查询中的潜在NULL值
Access内部运行时可能自动兼容一些隐性NULL,但OLEDB驱动对NULL的校验更严格。把所有子查询里涉及计算、聚合、字段引用的地方,用Nz()函数强制替换NULL为合理默认值,比如:SELECT Nz(SUM(Amount), 0) AS Total FROM SubTable WHERE ...
哪怕Access内部显示正常,OLEDB可能会因为子查询返回的NULL在主查询中参与运算(比如加减乘除)触发错误。检查主查询与子查询的字段类型匹配
确认子查询返回的字段类型和主查询中引用它的位置类型完全一致。比如子查询返回数值型,但主查询里当作文本处理,或者反过来,OLEDB驱动在类型转换时可能遇到隐性NULL报错,而Access内部会自动适配这种差异。更换适配Access 2019的OLEDB驱动
你当前用的Microsoft.ACE.OLEDB.12.0是针对Access 2007-2010的版本,虽然向下兼容,但和Access 2019的适配性可能存在隐性问题。尝试修改连接字符串为:Provider=Microsoft.ACE.OLEDB.16.0; Data Source=D:\xxxxx.accdb;
注意要确保服务器上安装了对应版本的Access Runtime或ACE驱动。拆分查询逐步定位问题
把主查询里的子查询单独拿出来,用OLEDB直接执行,看是否触发错误。如果子查询单独运行没问题,再逐步拼接主查询的逻辑(比如先关联一个子查询,再关联另一个),每一步都用OLEDB测试,就能定位到具体是哪个关联或计算步骤出的问题。清除Access查询缓存
Access内部可能缓存了查询执行计划,而OLEDB调用时用的是不同的执行路径。打开主查询的设计视图,点击「设计」→「查询设置」→「清除查询缓存」,保存后再用OLEDB调用试试。排查隐性NULL字段
除了之前检查的非空列,还要排查计算列、索引字段或关联字段的隐性NULL。可以把主查询结果导出到Excel,逐列检查是否存在NULL(注意区分空格、空字符串和真正的NULL)。
内容的提问来源于stack exchange,提问作者Chuck R.

