代码之家  ›  专栏  ›  技术社区  ›  adam

一列的SQL设置值等于另一列文本中函数的输出

  •  0
  • adam  · 技术社区  · 7 年前

    我有一份名单 [TempTable] 有两个字段的表, [ClientName] [NameID] . ClientName 是来自另一个包含符号的源的输入,我希望将它们处理为 [姓名ID] 删除所有特殊符号后的字段。

    下面是删除符号的代码:

     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似乎不起作用。我最后得到了 [] 在里面 [客户端名称] 远离的。有没有办法在SQL代码中使用该函数,或者我必须逐个循环遍历表中的每个条目?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Jaro    7 年前

    我检查了你的密码,结果很好。也许你可以修改如下。 我在查询设计器中测试过。如何运行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
    

    我在Access2010测试过。

        2
  •  0
  •   Vlado    7 年前

    您正在更改此处的字符位置,这可能是它无法正常工作的原因:

    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