Сортиране на записи по ред с различаване на малките и главните букви

Отнася се за
Access за Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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". Това се случва, защото когато Access ги оценява като текстови стойности, "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. Изберете "Добавяне на таблици" (показване на таблица в Access).

  5. Плъзнете полетата, които искате, в мрежата.

  6. В първата празна колона, в реда "Поле " въведете Expr1: StrToHex([SortField]). StrToHex е дефинираната от потребителя функция, която създадохте по-рано. Заместете SortField с името на полето, съдържащо стойностите с различаване на малките и главните букви.

  7. В клетката "Сортиране" щракнете върху "Възходящ" или "Низходящ". Ако изберете възходящ ред, стойностите, които започват с главни букви, се появяват преди стойностите, които започват с малки букви. Низходящият ред прави обратното.

  8. Превключване към изглед на лист с данни. Access показва записите, сортирани в ред с различаване на малките и главните букви.