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

读取直通查询结果时出现类型不匹配错误,求原因及解决方法

类型不匹配错误的原因及解决方法

错误根源是对象模型不兼容:你声明的rs是ADODB.Recordset,但CurrentDb.OpenRecordset返回的是DAO.Recordset,二者属于不同的数据访问对象模型,无法直接赋值,因此触发类型不匹配错误。

解决方法

方案1:改用DAO记录集(最简单)

如果代码不需要ADODB的特殊特性,直接切换到DAO模型即可:

Private Function GetActivityStates()

   Dim strSQL As String
   Dim rs As DAO.Recordset ' 修改为DAO.Recordset
   Dim intPauseState As Integer
   
   CreatePassThruQuery "WOActivityStates", "exec spGetActivityStates '" & strWO & "' "
   
   Set rs = CurrentDb.OpenRecordset("WOActivityStates") ' 现在类型匹配

   Do While Not rs.EOF
      'code...
      rs.MoveNext
   Loop
   
ExitLabel:
   ' 清理资源
   If Not rs Is Nothing Then
      If rs.State = dbOpenRecordset Then rs.Close
      Set rs = Nothing
   End If
   Exit Function
   
ErrLabel:
   ErrHandler Err.Number, Err.Description
   Resume ExitLabel

End Function

方案2:继续使用ADODB记录集

如果必须保留ADODB模型,需要通过ADODB连接来打开记录集,而非依赖CurrentDb:

Private Function GetActivityStates()

   Dim con As New ADODB.Connection
   Dim rs As New ADODB.Recordset
   Dim intPauseState As Integer
   Dim qdf As DAO.QueryDef
   
   CreatePassThruQuery "WOActivityStates", "exec spGetActivityStates '" & strWO & "' "
   ' 获取直通查询的连接配置
   Set qdf = CurrentDb.QueryDefs("WOActivityStates")
   
   ' 建立ADODB连接并执行查询
   con.ConnectionString = qdf.Connect
   con.Open
   Set rs = con.Execute(qdf.SQL)

   Do While Not rs.EOF
      'code...
      rs.MoveNext
   Loop
   
ExitLabel:
   ' 清理资源
   If Not rs Is Nothing Then
      If rs.State = adStateOpen Then rs.Close
      Set rs = Nothing
   End If
   If Not con Is Nothing Then
      If con.State = adStateOpen Then con.Close
      Set con = Nothing
   End If
   Set qdf = Nothing
   Exit Function
   
ErrLabel:
   ErrHandler Err.Number, Err.Description
   Resume ExitLabel

End Function

额外提示

直接拼接字符串"exec spGetActivityStates '" & strWO & "' "存在SQL注入风险,建议改用参数化查询:

  • 针对直通查询,可创建带参数的查询定义;
  • 针对ADODB,使用ADODB.Command对象传递参数,避免字符串拼接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:35:36