删除Access字段中的非字母数字字符

时间:2010-03-22 16:44:02

标签: ms-access

我需要从大量访问字段中的字符串中删除连字符。这样做的最佳方式是什么?

目前,条目遵循以下一般格式:

  2010-54-1
  2010-56-1
  etc.

我正在尝试从此字段运行追加查询,但我总是收到验证错误,导致查询失败。我认为这次失败的原因是条目中的大肆宣传,这就是我需要删除它们的原因。

我已经google了,我看到有很多使用vbscript的格式指南,但我不确定如何将vb集成到Access中。这对我来说是新的:)

提前致谢, 雅克

修改

因此,我运行了一个测试用例,其中包含一些简单的文本值。它们也不起作用,问题不是连字符。

2 个答案:

答案 0 :(得分:1)

我不确定连字符实际上是没有看到样本数据/查询的问题,但如果你需要做的就是摆脱它们,那么Replace函数应该足够了(你可以在查询中使用它)< / p>

示例:http://www.techonthenet.com/access/functions/string/replace.php

如果您需要执行一些比这更高级的字符串操作(或多次调用替换),您可能需要创建一个可以从查询中调用的VBA函数,如下所示:

http://www.pcreview.co.uk/forums/thread-2596934.php

要做到这一点,您只需要在访问项目中添加一个模块,并在那里添加该功能,以便能够在查询中使用它。

答案 1 :(得分:0)

我删除了除字母数字字符以外的所有内容时使用的函数。只需创建一个查询,并在查询中使用您尝试修改的任何字段中的函数。运行速度比查找和替换要快得多。

Public Function AlphaNumeric(inputStr As String)
    Dim ascVal As Integer, originalStr As String, newStr As String, counter As Integer, trimStr As String
    On Error GoTo Err_Stuff
    ' send to error message handler
    If inputStr = "" Then Exit Function
    ' if nothing there quit
    trimStr = Trim(inputStr)
    ' trim out spaces
    newStr = ""
    ' initiate string to return
    For counter = 1 To Len(trimStr)
        ' iterate over length of string
        ascVal = Asc(Mid$(trimStr, counter, 1))
        ' find ascii vale of string
        Select Case ascVal
            Case 48 To 57, 65 To 90, 97 To 122
                ' if value in case then acceptable to keep
                newStr = newStr & Chr(ascVal)
                ' add new value to existing new string
        End Select
    Next counter
    ' move to next character
    AlphaNumeric = newStr
    ' return new completed string
Exit Function
Err_Stuff:
    ' handler for errors
    MsgBox Err.Number & " " & Err.Description
End Function

刚刚注意到代码的链接,看起来与我的相似。猜猜这只是另一种选择。