0

MSACCESS に 2 つのテーブルがあります。

表1

table1ID,txtOld,txtreplace,country

1,ä,AA,ドイツ

2,ä,a,all

3,Ä,A,ノルウェー

4,Ä,a,all

5,Ä,A,ドイツ

テーブル2

table2ID,名,住所,国

1,RonÄld, メイン ストリート, ドイツ

2、マドナ、パークウェイ、アメリカ

3、マドナ、パークウェイ、ノルウェー

table1に割り当てられた国の文字に基づいて、table2の名と住所の特殊文字を置き換えたいと思います。国が一致しないか、テーブル 1 に割り当てられていない場合、たとえばここでは USA が割り当てられていない場合、テーブル 1 の国名 "all" と一致する文字が置き換えられます。

4

1 に答える 1

1

残念ながら、単一の Access SQL クエリでこれを行うことはできないため、VBA を使用します。

ここに画像の説明を入力

Sub ReplaceAccentsInTable2()
'
  Dim rst As dao.Recordset
  Dim rst1 As dao.Recordset
'
  Set rst = CurrentDb.OpenRecordset("table2")
'
' replace first by country specific alphabet:
'
  Do While (Not rst.EOF)
    '
    Set rst1 = CurrentDb.OpenRecordset("SELECT txtOld, txtreplace" _
      & " FROM table1 WHERE (country='" & rst!Country & "');")
    '
    rst.Edit
    '
    While (Not rst1.EOF)
      rst!Firstname = Replace(rst!Firstname, rst1!txtOld, rst1!txtreplace, , , vbBinaryCompare)
      rst!Address = Replace(rst!Address, rst1!txtOld, rst1!txtreplace, , , vbBinaryCompare)
      rst1.MoveNext
    Wend
    '
    rst.Update
    rst.MoveNext
    '
  Loop
'
' replace then "all" alphabet: this is useful for Norway, as â is not set in table1:
'
  Set rst1 = CurrentDb.OpenRecordset("SELECT txtOld, txtreplace" _
    & " FROM table1 WHERE (country='all');")
'
  rst.MoveFirst
'
  Do While (Not rst.EOF)
    '
    rst.Edit
    rst1.MoveFirst
    '
    While (Not rst1.EOF)
      rst!Firstname = Replace(rst!Firstname, rst1!txtOld, rst1!txtreplace, , , vbBinaryCompare)
      rst!Address = Replace(rst!Address, rst1!txtOld, rst1!txtreplace, , , vbBinaryCompare)
      rst1.MoveNext
    Wend
    '
    rst.Update
    rst.MoveNext
    '
  Loop

'
' close ADO objects:
'
  rst1.Close
  Set rst1 = Nothing
'
  rst.Close
  Set rst = Nothing
'
End Sub

ここの結果table2:

ここに画像の説明を入力

于 2013-11-13T23:45:12.517 に答える