1

1 つのテーブルが他のテーブルで一致を見つける必要がある 2 つのテーブルがあります。

table1 と Masterfiles テーブルがあるとします。Table1 には、Masterfiles と同じ名前フィールドがあります。

ただし、Masterfiles にはミドル ネームがあるのに対し、table1 の名前フィールドにはミドル ネームのイニシャルしかないため、値が異なります。

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 の性別フィールドに入れるにはどうすればよいでしょうか?

4

2 に答える 2

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 を各人に付与します。
  • 名前を最初、中間、および最後のフィールドに分割します。
  • 1 つのテーブルを使用して、個人に固有のすべての情報を格納します。次に、ID を使用して他のテーブルにリンクします。
于 2013-04-18T15:12:36.117 に答える