Access 按升序或降序顺序对记录进行排序, 而不考虑大小写。 然而,通过编写数行 Visual Basic for Applications(VBA)代码,你可以按其 ASCII 字符值对文本进行排序。 基于 ASCII 值的排序区分大小写字母,从而产生区分大小写的顺序。
下表演示 Access 中的升序排序顺序与区分大小写的排序顺序有何不同:
预排序顺序 |
升序 |
区分大小写的顺序 |
---|---|---|
c |
a |
A |
D |
A |
B |
a |
B |
C |
d |
b |
D |
B |
c |
a |
C |
C |
b |
A |
D |
c |
b |
d |
d |
虽然"升序"列的结果最初可能看起来有些不可预测,但结果并不是那么复杂。 在"升序"列中,"a"显示在"A"之前,而"B"显示在"b"之前。 出现这种情况的原因是,当计算为文本值时,无论是小写还是大写 "A" = "a" 和 "B" = "b"。 Access 会考虑值的原始顺序。 在预排序顺序列中,"a"位于"A"之前,"B"位于"b"之前。
执行区分大小写的排序操作时,文本值替换为其 ASCII 值。 例如,A = 65、a = 97、B = 66、b = 98 等。
编写 VBA 代码
-
创建 VBA 模块,在"声明"部分中键入以下一行(如果尚未显示):
Option Explicit
-
在 Visual Basic 编辑器的模块中键入以下过程:
Function StrToHex (S As Variant) As Variant ' ' Converts a string to a series of hexadecimal digits. ' For example, StrToHex(Chr(9) & "A~") returns 09417E. ' Dim Temp As String, I As Integer If VarType(S) <> 8 Then StrToHex = S Else Temp = "" For I = 1 To Len(S) Temp = Temp & Format(Hex(Asc(Mid(S, I, 1))), "00") Next I StrToHex = Temp End If End Function
可以从查询调用上一个用户定义的函数 StrToHex。 将排序字段的名称传递到这个函数时,它将按照区分大小写的顺序对字段值进行排序。
-
现在,创建将调用此函数的查询。
在“创建”选项卡上的“查询”组中,单击“查询设计”。
-
选择“ 添加表 (在 Access) 中 显示表 ”。
-
将需要的字段拖至网格。
-
在首张空白列中的 字段 行中,键入 Expr1:StrToHex([SortField])。
StrToHex 是之前创建的用户定义函数。 SortField 是包含区分大小写的值的字段名称。
-
在排序 单元格中,点击 升序 或 降序。
如果选择升序,以大写字母开头的值将显示在以小写字母开头的值之前。 应用降序排序会反向应用。
-
切换到“数据表视图”。
Access 按区分大小写的顺序排列显示记录。