2016-06-24 7 views
1

ドイツの顧客のレコードで構成されるMS Accessデータベーステーブルがあります。私は検索する名前を入力するMS Excelのユーザーフォームを持っています。私は、フォームを送信した後、それは、VBAでの検索クエリを作成し、データベースへの接続を確立し、クエリを実行します:アクセスデータベース非アクセント型検索テキストを使用したアクセント付き(Unicode)レコードの検索

SELECT CustomerNumber FROM CustomerTable WHERE (CustomerName LIKE '%loffel%'); 

問題があり、この顧客は「Löffel」としてデータベースに記録されています。私が「loffel」を検索すると、結果は返されません。

ユニコード文字で検索して結果を見つける方法はありますか?

+0

'o' <>'ö'、それは、すべてのエンコーディングと文字セットの事実です。だから私は思う:いいえ。 – Andre

+0

@Andreと似ているとは思いません。あなたはそのような文字を置き換えることができますか? ''%l?ffel% ''とします。もちろん、Lüffel、Léffel、Läffelも一致しますが、おそらくゼロ試合よりも良いでしょう。 – Gustav

答えて

1

ここでは、考えられる回避策を示します。それはかなりではありませんが、うまくいくようです。

ユーザーがアクセント記号の付いていない検索語を入力させ、VBAコードは、指定されたアクセントのない文字を、可能なバリアントのリスト(例えば、 oがそのように

... LIKE '%loffel%' 

... LIKE '%l[oö]ffel%' 

使用してコードのようになり、[oö]によって置き換えられます。

Option Explicit 

Sub so38010103() 
    Dim oChars As String 
    ' e.g., U+00F6 is "Latin Small Letter O With Diaeresis" 
    oChars = "[o" & ChrW(&HF6) & "]" 
    ' (add other accented "o"s above, and other character lists below, as needed) 

    'test data 
    Const searchFor = "loffel" 

    Dim conn As New ADODB.Connection 
    conn.Open _ 
      "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};" & _ 
      "DBQ=C:\Users\Public\so38010103.accdb" 
    Dim cmd As New ADODB.Command 
    cmd.ActiveConnection = conn 
    cmd.CommandType = adCmdText 
    cmd.CommandText = "SELECT COUNT(*) AS n FROM CustomerTable WHERE (CustomerName LIKE ?)" 
    cmd.Parameters.Append cmd.CreateParameter("?", adVarWChar, adParamInput, 255) 

    Dim rst As ADODB.Recordset 

    ' test 1: literal search 
    cmd.Parameters(0).Value = "%" & searchFor & "%" 
    Set rst = cmd.Execute 
    Debug.Print rst(0).Value & " record(s) found" ' 0 record(s) found 
    rst.Close 

    ' test 2: replace "o" with list of accented variants 
    cmd.Parameters(0).Value = "%" & Replace(searchFor, "o", oChars, 1, -1, vbTextCompare) & "%" 
    Set rst = cmd.Execute 
    Debug.Print rst(0).Value & " record(s) found" ' 1 record(s) found 
    rst.Close 

    conn.Close 
End Sub 
関連する問題