如何在Access VBA中将Double变量传入SQL查询?
问题分析与解决
你的代码存在两个核心问题,直接导致了数据不匹配错误:
- SQL字符串拼接语法错误:原代码把变量引用
Me.txtCNF写在了双引号包裹的SQL文本内部,数据库会将& Me.txtCNF &当成普通字符串处理,而非实际要传递的控件值。 - 数据类型不匹配:既然直接输入数值(如1331.1)能正常运行,说明
[CNF ID#]是数值型字段,但原代码给控件值添加了单引号,会把数值强制转为字符串,触发类型不匹配报错。
修正后的代码
首先要初始化数据库对象,再正确拼接SQL语句:
Dim dbCurr As DAO.Database Dim rsCnf As DAO.Recordset Dim cnfSql As String ' 初始化当前数据库对象 Set dbCurr = CurrentDb() ' 数值型字段无需加单引号,直接拼接控件值 cnfSql = "SELECT [Cnf].[CNF ID#], [Cnf].[Title] FROM [Cnf] WHERE [Cnf].[CNF ID#] = " & Me.txtCNF Set rsCnf = dbCurr.OpenRecordset(cnfSql) ' 使用完记录集后建议释放资源 ' rsCnf.Close ' Set rsCnf = Nothing ' Set dbCurr = Nothing
额外说明
如果后续[CNF ID#]改为文本型字段,需要给控件值加上单引号,同时处理单引号转义(避免控件值含单引号时SQL报错):
cnfSql = "SELECT [Cnf].[CNF ID#], [Cnf].[Title] FROM [Cnf] WHERE [Cnf].[CNF ID#] = '" & Replace(Me.txtCNF, "'", "''") & "'"
内容的提问来源于stack exchange,提问作者Justin Valentine
相关产品推荐
相关产品推荐

