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

MS Access VBA出现Error 3464数据类型不匹配及Error 91问题求助

SQL错误排查与修复

你遇到的两个错误可以分别定位和解决:

Error 3464:条件表达式中数据类型不匹配

问题出在WHERE子句的类型匹配上:

  • 如果RFQID是数字类型(如整数、长整型),原代码中给Me![RFQID]加了单引号,会把数字转为字符串,导致和表中数字类型的RFQID比较时类型不匹配。
  • 修复方法:去掉WHERE子句里的单引号,修改后的SQL如下:
SQL = "SELECT TempRFQ.[RFQID] AS [RFQID], TempRFQ.[LI] AS [LI], TempRFQ.[QTY] AS [QTY], TempRFQ.[UI] AS [UI], TempRFQ.[PN] AS [PN], " & _
"TempRFQ.[Description] AS [Description], TempRFQ.MFR AS [MFR], TempRFQ.MFC AS [MFC], TempRFQ.[AC] AS [AC], TempRFQ.[Remarks] AS [Remarks] " & _
"FROM RFQ INNER JOIN TempRFQ ON RFQ.[RFQID] = TempRFQ.[RFQID] " & _
"WHERE RFQ.[RFQID] = " & Me![RFQID] & " ORDER BY len(TempRFQ.[LI]),TempRFQ.[LI];"
  • 额外检查:确认RFQ和TempRFQ两张表中的RFQID字段类型完全一致(要么都是数字,要么都是文本),否则JOIN条件也会触发类型不匹配。

运行时错误91:对象变量或With块变量未设置

这个错误和SQL语句本身无关,是执行SQL的VBA代码存在问题:

  • 常见场景:使用Recordset对象时,未正确初始化就调用方法。比如直接写rs.Open SQL,但没有用Set关键字给对象赋值。
  • 修复示例:如果是用Recordset执行SQL,代码应该写成:
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset(SQL) ' 必须用Set初始化对象
' 后续操作...
rs.Close
Set rs = Nothing
  • 排查方向:检查所有对象变量(如Recordset、QueryDef等)是否都通过Set关键字正确赋值,避免引用未初始化的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:03:11