1

我有一个表,其中包含一个名为 PATRN_NAME 的字段,该字段由 First_Name、Last_Name MI 设置

例子:

史密斯,詹姆斯 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
4

2 回答 2

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
于 2013-08-07T19:02:26.773 回答
0

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

rst!last = split()....

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

于 2013-08-07T18:44:20.887 回答