【问题标题】:How to split a Name Field that has incorrect data?如何拆分包含不正确数据的名称字段?
【发布时间】:2013-08-07 18:36:40
【问题描述】:

我有一个表,其中有一个名为 PATRN_NAME 的字段,其中设置了 First_Name、Last_Name M.I.

例子:

史密斯,詹姆斯 M

琼斯,克里斯·J。

我正在尝试将该字段拆分为 FIRST_NAME、LAST_NAME 和 MI 字段。我刚刚问了一个关于这个的问题,有人帮我使用 Split() 来获取 LAST_NAME 字段。但是,当我尝试对 FIRST_NAME 使用 Split() 函数时,它不起作用,因为该字段的记录不遵循该字段的名称约定,而是如下所示:“城镇图书馆 - GW”或“捐赠来自纽约市”。

当我的代码遇到这些类型的名称时,它会在我使用 rst!FIRST_NAME = Split(Trim(Split(rst!PATRN_NAME, ",")(1)) 的行上抛出错误“下标超出范围” , " ")(0)。如何使我的代码仅在大多数字段遵循标准名称约定的数据上运行?

Function Change_Name()

Dim dbs As DAO.Database
Dim rst As DAO.Recordset

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Active Patrons", dbOpenDynaset)

rst.MoveFirst

Do While Not rst.EOF

    rst.Edit
    rst!LAST_NAME = Split(rst!PATRN_NAME, ",")(0)
    rst!FIRST_NAME = Split(Trim(Split(rst!PATRN_NAME, ",")(1)), " ")(0)
    rst.Update
    rst.MoveNext

Loop
End Function

【问题讨论】:

  • 当您到达MI 部分时,请在“立即”窗口中尝试此操作,看看是否有用:? Replace("J.", ".", "")

标签: ms-access vba dao


【解决方案1】:

您有两个拆分:一次用于逗号;另一个空间。所以声明两个字符串数组来保存这些拆分的结果。

Dim astrComma() As String
Dim astrSpace() As String

那么我认为在循环中使用这些数组会更简单。

rst.Edit
astrComma = Split(rst!PATRN_NAME, ",")
If UBound(astrComma) > 0 Then
    ' this means PATRN_NAME contains at least one comma,
    ' so assume LAST_NAME is everything before first comma
    rst!LAST_NAME = astrComma(0)
    ' expect FIRST_NAME present in second member of astrComma
    astrSpace = Split(Trim(astrComma(1)), " ")
Else
    MsgBox "no LAST_NAME in " & rst!PATRN_NAME
End If

If UBound(astrSpace) >= 0 Then
    ' you may also want to check whether this is an empty
    ' string before you store it; does the field allow 
    ' empty strings?
    rst!FIRST_NAME = astrSpace(0)
Else
    MsgBox "no FIRST_NAME  in " & rst!PATRN_NAME
End If
rst.Update

【讨论】:

  • 由于某种原因,它根本没有填充 FIRST_NAME 字段,但 LAST_NAME 字段工作正常,它显示了没有姓氏的记录。
  • 我只是单步执行了代码,它会进入 If UBound(astrSpace) >= 0 块,但它显示的是 asrSpace(0)=""。因此它为 rst!FIRST_NAME 分配了一个空字符串
  • 我刚刚在astrSpace = 行中添加了Trim()。抱歉,我在上一个问题中有这个问题,但在这个问题中忘记了。
  • 哈哈我试图采取简单的方法。如果我不能得到它,我会发布另一个问题。再次感谢!
【解决方案2】:

如果字段中没有逗号,则 Last_name 将等于 Patrn_name 所以

rst!last = split()....

如果 rst!last rst!patrn_name) 那么 rst!first = split()....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2017-09-27
    • 2019-04-23
    • 1970-01-01
    • 2012-05-08
    • 2023-02-24
    • 1970-01-01
    相关资源
    最近更新 更多