You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS Access部分记录读取异常:是SQL问题还是软件Bug?

Access记录集字段读取异常问题排查

背景

涉事数据库大小仅88.5MB,包含815921条气象数据(1个日期字段+13个十进制数字字段)。VB代码可正常处理95%的记录,但约5%的记录无法被正确提取和读取。

前置操作:先通过查询表单筛选出4个字段均为NOT NULL的记录,得到262308条数据,再通过VB代码基于这4个非空字段计算新变量(例如调用带[Chrono]参数的Nord—()函数生成N字段)。

核心问题

尽管查询结果仅包含无NULL值的记录,但在对应的记录集中,除用于检索的日期字段外,其余字段多被识别为NULL值。

例如某测试记录:在查询表单中显示[Rafale°]值为236,但代码读取该字段时却为NULL,导致流程出错(目标记录已被成功检索,CT.EOF不为真)。

相关VB代码

Function SO_Test(ByVal Chrono) As Single
    Dim db As Database, CT As Recordset, Durée As Single
    Set db = CurrentDb()
    Set CT = db.OpenRecordset("SELECT * " _
        & "FROM [MesuresOK] WHERE [Chrono] = #" _
        & Format(Chrono, "m\/d\/yyyy hh:mm:ss") _
        & "#;", dbOpenDynaset)
    While Not CT.EOF
        Select Case CT![Rafale°]
            Case 181 To 269
                SO_Test = Vecteur(225, CT![Rafale°]) * CT![Rafale] * Durée
            Case NULL
                Stop    ''' 此处触发,但数据库中[Rafale°]实际为236 ''' 
            Case Else
                SO_Test = 0
        End Select
        CT.MoveNext
    Wend
    CT.Close  
End Function

注:代码中原SO_Test—为笔误,已修正为SO_Test

尝试过的无效方案

  • 执行3次“压缩和修复数据库”,问题未解决
  • 将数据导出至Excel,转为文本后再转回日期/数字格式重新导入Access,测试记录的"236"仍被识别为NULL

偶然生效的解决方案

在SQL查询中添加额外条件后,问题消失:

-- 原语句(失败)
& "#;", dbOpenDynaset)

-- 修改后语句(正常)
& "# AND [Rafale°] > 0;", dbOpenDynaset)

修改后该记录可被正确检索,CT![Rafale°]值读取为236。

疑问

这是MS Access的Bug,还是我在SQL代码中忽略了重要细节?

注:未添加额外条件时,95%的记录均可被正确检索并读取所有值。


内容的提问来源于stack exchange,提问作者Bughater

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:15:07