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

VB6.0中ADODB Recordset组合AND/OR过滤条件报3001错误

解决VB6 ADO Recordset Filter组合条件报错问题

你遇到的运行时错误3001,是因为VB6的ADO Recordset对(多个OR条件) AND 其他条件这类复杂Filter语法的解析存在兼容性问题——单独的OR或AND条件都能正常执行,但组合后就会触发参数类型冲突的错误。

最优解决方法:用IN子句替代多个OR条件

把原来拼接多个invtype='xxx' or的逻辑改成invtype IN ('值1','值2',...),既简化Filter字符串,又能避开ADO的解析bug。

修改后的代码如下:

Dim arrInvTypes() As String
Dim i As Integer

' 收集所有Inv_Type值到数组
i = 0
While Not rsInvFilter.EOF
    ReDim Preserve arrInvTypes(i)
    arrInvTypes(i) = rsInvFilter!Inv_Type
    i = i + 1
    rsInvFilter.MoveNext
Wend

' 拼接IN子句格式的Filter字符串
If i > 0 Then
    strResult = "(invtype IN ('" & Join(arrInvTypes, "','") & "')) and (CoCode='" & strCo_Code & "')"
Else
    ' 无筛选类型时的处理,比如过滤掉所有记录
    strResult = "1=0"
End If

' 应用Filter
rsMain.Filter = strResult

方法有效性说明

  1. IN子句语法更简洁,ADO的Filter解析器对这种结构支持更稳定
  2. 缩短了Filter字符串长度,避免触发潜在的条件长度限制
  3. 逻辑和原代码完全一致,只是写法更规范

验证建议

可以先单独测试简化后的Filter语句,确认能正常运行后再替换动态拼接代码:

rsMain.Filter = "(invtype IN ('BC','BEX','BK','JC','JEX','JK')) and (CoCode='01')"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:17:45