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
相关产品推荐
相关产品推荐

