Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access2007

access 2007按区分大小写次序对记录排序

时 间:2008-07-24 08:10:31
作 者:Microsoft   ID:11  城市:上海  QQ:3002789054点击这里给麥田发消息
摘 要:按区分大小写次序对记录排序
正 文:

Microsoft Office Access 2007 以升序或降序对记录排序时不考虑大小写。但是,通过编写几行 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 代码

  1. 创建 VBA 模块,并在“声明”节中键入以下行(如果那里还没有它):

     

    Option Explicit

     

  2. 在 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。将排序字段的名称传递给此函数时,它将按区分大小写的次序对字段值排序。

  3. 现在,创建用来调用此函数的查询。

    “创建”选项卡上的“其他”组中,单击“查询设计”

  4. “显示表”对话框中,单击希望排序的表,然后单击“添加”
  5. 将所需字段拖到网格中。
  6. 在第一个空白列的“字段”行中,键入 Expr1: StrToHex([SortField])

    StrToHex 是在前面创建的用户定义函数。SortField 是包含区分大小写值的字段的名称。

  7. “排序”单元格中,单击“升序”“降序”

    如果选择升序次序,则以大写字母开头的值将出现在那些以小写字母开头的值之前。应用降序次序则以相反方式排序。

  8. 切换至数据表视图。

    Access 将显示记录,这些记录以区分大小写的次序进行排序。



Access软件网官方交流QQ群 (群号:54525238)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助