2013-04-18 44 views
1

我有兩個表,即1個表需要在另一個表上找到匹配項。如何刪除中間初始ms訪問的時間段

說我有table1和Masterfiles表。 Table1的名稱字段與Masterfiles相同。

但是,table1名稱字段具有不同的值,因爲它只有中間名初始值,而主文件名中間名。

現在我想從Masterfiles中獲得名爲「Gender」的其他字段值,因爲table1對性別字段沒有任何價值。

表是這樣的:

Table1        Masterfiles 

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

因爲我有很多的表1中需要得到性別字段的我需要以編程方式做到這一點的值的記錄。

目前,我有以下代碼:

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 

但這種代碼不會得到任何結果,因爲某些名稱字段的表1的值在中間最初的一段時間,而其他行有沒有時間。請參考上面的示例數據。 「史密斯,約翰」的中間首字母有一段時間,而「卡納德,唐納德」沒有時期。

那麼如何查詢Masterfiles並獲取Gender字段的值並將其放在table1性別字段中?

+1

如果rs2.recordcount> 1,您可能希望將記錄標記爲異常。 – Richard

回答

0
strSQL = "SELECT [Name], Gender FROM Masterfiles WHERE [Name] Like '%" & replace(Me!txtName,".","") & "%'" 
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將其鏈接到其他表。