我有一个 Excel VBA 项目,它循环访问参数表中的列表,并使用参数表的行填充数据,为 SQL Server 数据库的 SQL 查询的参数提供参数。 这是从启用宏的主工作簿中的参数表中的 n 行生成 Excel 文档的 n 个版本。
SQL DB 中请求的某些数据包含 é(e-acute)字符,但当它运行 ADODB 记录集对象时,它的另一侧会显示为 □(WHITE SQUARE,U+25A1)。
A) 我需要已发布文档中显示的正确字符。
B) 我的代码将 SQL 查询返回的字符串与电子表格中的值进行匹配,但在这些字符上失败。
当我在 SSMS 中运行查询时,它返回具有正确字符的字符串。
当我使用 Excel 查询手动连接和查询数据库时,它会在查询表和单元格中显示正确的字符。
当我使用 VBA 将数据获取到 ADODB 记录集,然后使用以下方法将该数据复制到列表对象表时,我得到白色方块:
.Range(<<Address>>).CopyFromRecordset
我在不同的计算机上运行此代码,得到不同的结果,但现在我所有的计算机都得到相同的结果。
我可以想象使用一些硬编码的方法来处理这种特殊情况,但我希望它可以得到正确处理。
由于未使用 utf8,因此出现了用外来字符(重音、元音变音、日语、阿拉伯语、俄语等)替换 □ 和 ? 的情况。
有两个地方要查看,首先快速检查您的连接字符串,它是否使用 unicode 和 utf8 字符集,例如:
ConnectionString = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=your_server;Database=your_database;User=your_username;Password=your_password;Charset=utf8;
另一个可能发生的地方是 VARCHAR 字段,将它们更改为 NVARCHAR 以支持 utf8。
或者在 SQL Server 中,您可以在 varchar 字段上设置排序规则,如下所示:
Utf8Column VARCHAR(100) COLLATE Latin1_General_100_CI_AS_SC_UTF8