Первый символ каждого слова в строке - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть поле в таблице MS Access, которое содержит отчества людей, и мне нужно получить первую букву (инициалы) каждого имени в запросе SQL. Поле называется 'middle_names'

Например, если middle_name - 'John David', я хочу, чтобы вывод был 'J D'. Если middle_name - «Джон», я хочу, чтобы вывод был «J».

Я нашел некоторый код VBA, который должен это делать, но когда я вызываю его в запросе SQL, я получаю сообщение об ошибке -

несоответствие типа данных в выражении критерия

Поле имеет текстовый тип, и это VBA:

Function GetFirstLetters(middlename As String) As String
    Dim arr
    Dim I As Long
    arr = VBA.Split(middlename, " ")
    If IsArray(arr) Then
        For I = LBound(arr) To UBound(arr)
            GetFirstLetters = GetFirstLetters & Left(arr(I), 1)
        Next I
    Else
        GetFirstLetters = Left(arr, 1)
    End If
End Function

Когда я затем вызываю код в моем запросе SQL, например: GetFirstLetters(middle_name) Я получаю ошибку I упомянутый выше.

1 Ответ

2 голосов
/ 23 февраля 2020

Если данные вашей базы данных имеют значения NULL в столбце middle_name, то этот вызов функции вызовет эту ошибку, поскольку функция ожидает String, а NULL не является строкой.

Существует несколько способы решить эту проблему, один из которых - адаптировать ваш запрос для преобразования NULL в пустую строку перед передачей его функции:

GetFirstLetters(Nz([middle_name], ""))

Или вы можете сохранить исходный вызов функции, но затем свою функцию должен принять аргумент типа Variant, а затем обработать пустое значение:

Function GetFirstLetters(middlename As Variant) As String
    If IsEmpty(middlename) Then
        Exit Function
    End If
    ' Rest of your code ...
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...