SQL устанавливает значения одного столбца равными выводу функции из текста другого столбца - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть список имен, хранящихся в таблице [TempTable] с 2 полями, [ClientName] и [NameID].ClientName является вводом из другого источника, который содержит символы, и я хотел бы обработать их в поле [NameID] после удаления всех специальных символов.

Ниже приведен код для удаления символов:

 Public Function RemoveSpecial(Str As String) As String
    Dim xChars As String
    Dim I As Long
    xChars = "~!@#$%^&*()_+=-`{}|[]\:;'<>?,./"
    For I = 1 To Len(xChars)
        Str = Replace$(Str, Mid$(xChars, I, 1), "")
    Next
    RemoveSpecial = Str
End Function

Я думал где-то вроде:

UPDATE [TempTable] SET [NameID] = RemoveSpecial([ClientName])

Однако SQL, похоже, не работает.Я просто заканчиваю тем, что удалил [] in [ClientName].Есть ли способ использовать функцию в коде SQL или мне нужно циклически проходить каждую запись в таблице по очереди?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Здесь вы меняете положение символов, и, вероятно, поэтому оно работает неправильно:

Str = Replace$(Str, Mid$(xChars, I, 1), "")

Попробуйте этот код:

Public Function RemoveAllSpecialCharacters(inString As String) As String
    Const SpecialCharacters As String = "!,@,#,$,%,^,&,*,(,),{,[,],},-,/,_,;,',?,+,=,.,~,`, ,€"
    Dim newString As String
    Dim Char As Variant
    newString = inString
    For Each Char In Split(SpecialCharacters, ",")
        newString = Replace(newString, Char, "")
    Next
    newString = Replace(newString, ",", "")
    newString = Replace(newString, Chr(13), "")
    newString = Replace(newString, Chr(10), "")
    RemoveAllSpecialCharacters = Trim(newString)
End Function
0 голосов
/ 03 февраля 2019

Я проверил ваш код, и он отлично работает.Может быть, вы можете изменить его, как показано ниже.Я тестировал в конструкторе запросов.Как вы запускаете свой код SQL (из конструктора запросов или из VBA)?

UPDATE TempTable SET TempTable.NameID = RemoveSpecial([TempTable]![ClientName]);

Простой код в VBA (без обработки ошибок):

Public Function UpdateName()
    CurrentDb.Execute ("UPDATE TempTable SET TempTable.NameID = RemoveSpecial([TempTable]![ClientName]);")
End Function

Я тестировал в Access 2010.

...