ACCESS VBA中WHERE条件里数值类型值的处理问题
解决Access VBA中数值类型自动编号的SQL查询问题
你的问题核心是自动编号(AutoNumber)属于数值类型,SQL里不能给它加单引号(加了就变成字符串匹配,和数值字段类型不兼容)。之前去掉引号报错,大概率是因为列表框返回的是字符串格式的数值,需要转成数值类型再拼进SQL。
步骤1:确认列表框绑定列
先检查lst_Memo3a的BoundColumn属性,确保它绑定的是16_RecordID这一列(自动编号列)。比如如果列表框的第6列是16_RecordID,就把BoundColumn设为6(列索引从1开始计数)。
步骤2:修改SQL语句
把WHERE条件里的单引号去掉,并用CLng()把列表框的值转成长整型(AutoNumber默认是长整型),修改后的SQL部分如下:
Set Memo3a = DB.OpenRecordset("SELECT [16_COMMENTS].[16_Subject], [16_COMMENTS].[16_Category], [16_COMMENTS].[16_CommentDate], [16_COMMENTS].[16_Comment], [16_COMMENTS].[16_User], [16_COMMENTS].[16_RecordID] " & _ "FROM 16_COMMENTS " & _ "WHERE ([16_COMMENTS].[16_RecordID] = " & CLng(Me.lst_Memo3a.Value) & ");")
关键说明
CLng()把列表框返回的字符串转成长整型,和自动编号字段的类型完全匹配- 去掉单引号后,SQL会把这个值当成数值处理,和数值字段做等值匹配,不会再出现类型不兼容的报错
额外优化:处理空选择的情况
如果用户没选列表框就运行代码,会触发错误,建议加个前置判断:
If Not IsNull(Me.lst_Memo3a.Value) Then ' 原查询和赋值代码放在这里 Else MsgBox "请先选择一条记录!" Exit Sub End If
完整修改后的代码
Dim DB As Database Dim Memo3a As Recordset Dim txt_Subject As String Dim txt_Category As String Dim txt_Date As String Dim txt_Memo As String Dim txt_User As String Dim txt_RecID As String Dim ViewMemo1 As Form ' 统一变量名,原代码定义和使用的变量名不一致 ' 先判断是否选择了记录 If Not IsNull(Me.lst_Memo3a.Value) Then Set DB = CurrentDb Set Memo3a = DB.OpenRecordset("SELECT [16_COMMENTS].[16_Subject], [16_COMMENTS].[16_Category], [16_COMMENTS].[16_CommentDate], [16_COMMENTS].[16_Comment], [16_COMMENTS].[16_User], [16_COMMENTS].[16_RecordID] " & _ "FROM 16_COMMENTS " & _ "WHERE ([16_COMMENTS].[16_RecordID] = " & CLng(Me.lst_Memo3a.Value) & ");") DoCmd.OpenForm ("ViewMemo") Set ViewMemo1 = Forms("ViewMemo") ViewMemo1![txt_Subject].Value = Memo3a.Fields(0).Value ViewMemo1![txt_Category].Value = Memo3a.Fields(1).Value ViewMemo1![txt_Date].Value = Memo3a.Fields(2).Value ViewMemo1![txt_Memo].Value = Memo3a.Fields(3).Value ViewMemo1![txt_User].Value = Memo3a.Fields(4).Value ViewMemo1![txt_RecID].Value = Memo3a.Fields(5).Value Set DB = Nothing Set Memo3a = Nothing Else MsgBox "请先选择一条记录!" End If
内容的提问来源于stack exchange,提问作者BrianM
相关产品推荐
相关产品推荐

