Access сортирует записи по возрастанию или убыванию без учета регистра. Однако, написав несколько строк кода Visual Basic для приложений (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" находится перед "А", а буква "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 отображает записи, отсортированные с учетом регистра.