Excel Access数据库使用非重音搜索文本查找重音(Unicode)记录

Excel Access数据库使用非重音搜索文本查找重音(Unicode)记录,excel,vba,ms-access,unicode,Excel,Vba,Ms Access,Unicode,我有一个MS Access数据库表,由德国客户的记录组成。我在MS Excel中有一个用户表单,在其中输入要搜索的名称。提交表单后,它在VBA中创建搜索查询,建立与数据库的连接并运行查询: SELECT CustomerNumber FROM CustomerTable WHERE (CustomerName LIKE '%loffel%'); 问题是,这个客户在数据库中被记录为“Löffel”。当我搜索“loffel”时,它不会返回任何结果 有没有用Unicode字符搜索的方法,仍然可以找到

我有一个MS Access数据库表,由德国客户的记录组成。我在MS Excel中有一个用户表单,在其中输入要搜索的名称。提交表单后,它在VBA中创建搜索查询,建立与数据库的连接并运行查询:

SELECT CustomerNumber FROM CustomerTable WHERE (CustomerName LIKE '%loffel%');
问题是,这个客户在数据库中被记录为“Löffel”。当我搜索“loffel”时,它不会返回任何结果


有没有用Unicode字符搜索的方法,仍然可以找到结果?

这是一个你可以考虑的解决方法。这并不漂亮,但似乎确实管用

这样做的目的是让用户输入一个没有重音字符的搜索词,VBA代码将用可能的变体列表替换指定的无重音字母,例如,
o
替换为
[oö]
,因此

。。。比如说“%loffel%”
变成

。。。像'%l[oöffel%'
使用如下代码:

选项显式
子so38010103()
暗赭石为弦
例如,U+00F6是“带分音符的拉丁文小写字母O”
oChars=“[o”&ChrW(&HF6)和””
(根据需要,在上面添加其他重音“o”,并在下面添加其他字符列表)
"测试数据,
Const searchFor=“loffel”
Dim conn作为新的ADODB连接
康涅狄格州公开赛_
“驱动程序={Microsoft Access驱动程序(*.mdb,*.accdb)};”_
“DBQ=C:\Users\Public\so38010103.accdb”
Dim cmd作为新的ADODB.Command
cmd.ActiveConnection=conn
cmd.CommandType=adCmdText
cmd.CommandText=“从CustomerTable WHERE(类似CustomerName?)中选择计数(*)作为n”
cmd.Parameters.Append cmd.CreateParameter(“?”,adVarWChar,adParamInput,255)
将rst设置为ADODB.Recordset
'测试1:文字搜索
cmd.Parameters(0).Value=“%”和searchFor&“%”
设置rst=cmd.Execute
调试。打印rst(0)。值和“找到记录”找到0条记录
rst.关闭
'测试2:用重音变体列表替换“o”
cmd.Parameters(0).Value=“%”和Replace(搜索“o”,oChars,1,-1,vbTextCompare)和“%”
设置rst=cmd.Execute
调试。打印rst(0)。值和“找到记录”找到1条记录
rst.关闭
关闭连接
端接头

o
ö
,对于所有编码和字符集都是如此。所以我想:不,像安德烈,我想不是。您可以尝试将这些字符替换为?作为
“%l?ffel%”
。当然,吕费尔、吕费尔和吕费尔也会匹配,但可能比零匹配要好。