如何删除Middle Initial ms访问中的句点

时间:2013-04-18 14:57:36

标签: sql ms-access ms-access-2010

我有两个表,1个表需要在另一个表上找到匹配。

说我有table1和Masterfiles表。 Table1的名称字段与Masterfiles相同。

但是table1名称字段具有不同的值,因为它只有中间的初始值而Masterfiles具有中间名。

现在我想从Masterfiles中获取名为“Gender”的其他字段值,因为table1在性别字段上没有值。

表格如下:

Table1                              Masterfiles

Name             Gender             Name                      Gender
Smith, John E.                      Smith, John Estaw         M
Canard, Donald R                    Canard, Donald Reever     M

由于table1中有很多需要获取性别字段值的记录,我需要以编程方式进行。

目前我有以下代码:

Dim db As Database
Dim rs As DAO.Recordset
Dim rs2 As DAO.Recordset

Dim strSQL As String

Set db = CurrentDb

Set rs = db.OpenRecordset("Table1")

Do While Not rs.EOF
    strSQL = "SELECT [Name], Gender FROM Masterfiles WHERE [Name] Like '%" & Me!txtName & "%'"

    Set rs2 = db.OpenRecordset(strSQL)

    If rs2.RecordCount > 0 Then
        rs!Gender = rs2!Gender
    End If
Loop

但是这段代码不会得到任何结果,因为table1中Name字段的某些值在初始中间有一个句点,而其他行没有句点。请参阅上面的示例数据。 “史密斯,约翰”的中间首字母有句,而“卡纳德,唐纳德”没有句号。

那么如何查询Masterfiles并获取Gender字段的值并将其放在table1性别字段中?

2 个答案:

答案 0 :(得分:0)

 strSQL = "SELECT [Name], Gender FROM Masterfiles WHERE [Name] Like '%" & replace(Me!txtName,".","") & "%'"

答案 1 :(得分:0)

你有VB的名字;在搜索之前,最好只使用VB从名称末尾删除任何.

Dim searchName as String

If Me!txtName.Substring(Me!txtName.Length - 1,1) = '.' Then
    searchName = Me!txtName.Substring(0,Me!txtName.Length - 1)
Else
    searchName = Me!txtName
End If

strSQL = "SELECT [Name] FROM Masterfiles WHERE [Name] Like '%" & searchName & "%'"

然而,从长远来看,你应该修复你的设计:

  • 为每个人提供所有表格中相同的数字ID。
  • 将名称拆分为第一个,中间和最后一个字段。
  • 使用单个表存储此人唯一的所有信息。然后使用ID将其链接到其他表。