如何对筛选后的ListBox结果按首列(ID)升序排序?
解决ListBox搜索结果按ID升序排序的VBA语法问题
你的问题核心出在ORDER BY语句的语法错误上,原代码里的排序行有多余的引号和逗号,导致SQL语句无效,咱们直接修正这部分就能解决问题:
修正后的完整代码
Private Sub searchTB_Change() Dim strSource As String, strSearch As String 'code for searching records strSearch = Replace(searchTB.Text, "'", "''") strSource = "SELECT [ID], [VP_veiklioji], [VP_invented_name], [Pareisk_pav], [Par_gavimo_data], [Finished] " _ & "FROM TerPar_Oldsys " _ & "WHERE [ID] LIKE '*" & strSearch & "*' " _ & "Or [VP_veiklioji] LIKE '*" & strSearch & "*' " _ & "Or [VP_invented_name] LIKE '*" & strSearch & "*' " _ & "Or [Pareisk_pav] LIKE '*" & strSearch & "*' " _ & "Or [Par_gavimo_data] LIKE '*" & strSearch & "*' " _ & "Or [Finished] LIKE '*" & strSearch & "*' " _ & "ORDER BY [ID] ASC" ' 修正后的排序语句 Me.oldListBox.ColumnWidths = "1.5 cm; 3 cm; 4 cm; 4 cm; 2 cm; 0.6 cm" Me.oldListBox.RowSource = strSource End Sub
错误点解析
你原来的排序行& "ORDER BY" "[ID]" ASC,"有两个关键问题:
- 引号使用错误:
"ORDER BY"后面直接拼接"[ID]"会导致SQL里出现ORDER BY[ID](缺少空格),而且不需要把[ID]用双引号单独括起来,正确写法是将排序规则整合成一个字符串片段"ORDER BY [ID] ASC" - 末尾多余逗号:行尾的逗号会让SQL语句语法不完整,直接去掉即可
额外说明
如果你想尝试用DoCmd.SetOrderBy的方式实现排序,也可以在设置RowSource之后调用,示例如下:
Me.oldListBox.RowSource = strSource DoCmd.SetOrderBy "[ID] ASC"
不过直接在SELECT语句里包含ORDER BY是更贴合你现有代码逻辑的方式,执行效率也更直接。
内容的提问来源于stack exchange,提问作者Gexas
相关产品推荐
相关产品推荐

