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

Access VBA编写SQL拼接字段触发Type Mismatch类型不匹配错误求助

错误根因
  • 字符串边界识别错误:你在VBA中定义SQL字符串时,SQL语句内部用于包裹-的双引号被VBA识别为整个sRowsource字符串的结束符,后续的-被判定为数值减运算符,尝试对前后的字符串内容执行减法运算,直接触发类型不匹配错误。
  • 隐式取值风险(可选排查项):若lstReasons为列表框控件,直接写Select Case lstReasons属于隐式取控件的默认属性,若控件绑定列数据类型非数值,也可能触发类型不匹配,可显式指定取值属性确认。
修复代码

两种兼容写法可选,均可正常在Access中运行:

写法1:SQL内部用单引号(更简洁,推荐)

Private Sub EnableRowsource()
Dim sRowsource As String

Select Case lstReasons.Value ' 显式指定Value属性,避免隐式取值异常

Case 13                                                     
    sRowsource = "SELECT NRType, NRReason, (NRType & ' - ' & NRReason) As Concat FROM TBLnonroutine WHERE NRProcess='Bene' ORDER BY NRReason asc"
    
    cboNRReason1.RowSource = sRowsource
    cboNRReason2.RowSource = sRowsource
    cboNRReason3.RowSource = sRowsource
End Select

End Sub

写法2:用双引号转义(VBA字符串内双引号用两个连续双引号表示转义)

Private Sub EnableRowsource()
Dim sRowsource As String

Select Case lstReasons.Value

Case 13                                                     
    sRowsource = "SELECT NRType, NRReason, (NRType & "" - "" & NRReason) As Concat FROM TBLnonroutine WHERE NRProcess='Bene' ORDER BY NRReason asc"
    
    cboNRReason1.RowSource = sRowsource
    cboNRReason2.RowSource = sRowsource
    cboNRReason3.RowSource = sRowsource
End Select

End Sub
修复说明
  • Access JET SQL支持单引号作为字符串常量的边界符,优先用单引号写SQL内部的字符串,可以避免和VBA的双引号字符串边界冲突,减少转义错误概率。
  • 显式指定控件的Value属性取值,避免控件默认属性变更带来的隐式类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:27:00