VBA特殊字符U + 2264和U + 2265

我有一个令人沮丧的问题。 我有一个string包含不在此列表中的其他字符(检查链接)。 我的string表示一个SQL查询。

这是我的string可以包含的一个例子: INSERT INTO test (description) VALUES ('≤ ≥ >= <=')

当我检查数据库时,行插入成功,但字符“≤”和“≥”被replace为“=”字符。 在数据库中,描述列中的string看起来像“= => = <=”。

对于大多数人物我可以得到一个字符代码。 我为这两个符号search了一个字符代码,但是我没有find一个。 我的目标是检查我的string是否包含这两个字符,然后用“> =”和“<=”replace它们

===稍后编辑===

我试图检查for循环中的每个字符;

tmp = Mid $(str,i,1)

当我的for循环达到“≤”字符时,tmp的值就是“=”,所以Excel不能读取VBstring中的这个“≤”字符,那么当我检查字符码的时候,我会得到“=” (CHR(61))

你能够弄清楚数据库字符集中“≤”和“≥”的字符代码是什么? 如果是这样的话,也许尝试用chrw(character_code)replace查询string中的两个字符。

我刚刚testing了什么,你正在尝试使用Excel作为我的数据库的行 – 它看起来工作正常。

编辑:假设你仍然卡住,在这里寻找援助 – 你能确认你正在使用的数据库,以及任何types的信息设置你正在寻找插入你的string“描述”字段?

编辑2:我不熟悉SQL服务器,但不是你的“描述”字段设置为某种数据types? 如果是这样,它是否支持unicode字符? ncharvar,nchar似乎是支持Unicode的sql server数据types的例子。

这听起来像你也可能想尝试添加一个“N”前缀到你的查询string的值 – 请参阅我在“insert into”语句中使用unicode的前缀N? 以及如何从查询窗口中将Unicode文本插入SQL Server

编辑3:varchar将不符合适当的呈现Unicode – 请参阅这里varchar和nvarchar之间的区别是什么? 。 你可以切换到nvarchar? 如上所述,您可能还想在查询string中以“N”作为前缀,以获得完整的效果

编辑4:我不能说更多关于sqlserver,但你在这里看到的是VBA如何显示字符,而不是它如何实际存储在内存中 – 这是底线。 VBA不会正确显示“≤”,因为它不支持Unicode字符集。 然而,它可能 – 它确实 – 正确地存储二进制表示。

对于这种情况的任何证据,只要尝试从VBA中将字符粘贴回Excel中的另一个单元格,然后您将检索原始字符 – 或者查看VBA中的二进制表示forms:

 Sub test() Dim s As String Dim B() As Byte '8804 is "≤" character in Excel character set s = ChrW(8804) 'Assign memory representation of s to byte array B B = s 'This loop prints "100" and "34", respectively the low and high bytes of s coding in memory 'representing binary value 0010 0010 0110 0100 ie 8804 For i = LBound(B) To UBound(B) Debug.Print B(i) Next i 'This prints "=" because VBA can not render character code 8804 properly Debug.Print s End Sub 

如果我复制你的文本INSERT INTO test (description) VALUES ('≤ ≥ >= <=')并粘贴到VBA编辑器中,它会变成INSERT INTO test (description) VALUES ('= = >= <=')

如果将该文本粘贴到Excel单元格或Access表格的文本字段中,则会“正确”粘贴。

这似乎是支持字符代码的问题,我build议你看看这个SO问题 。

但是在你的程序中,这个string是从哪里来的,因为它不能在VBA中input?


编辑:我试着用下面的代码尝试一下,它就像一个魅力,从工作表中转移你的异国情调字符到表!

 Sub test1() Dim db As Object, rs As Object, cn As Object Set cn = CreateObject("DAO.DBEngine.120") Set db = cn.OpenDatabase("P:\Database1.accdb") Set rs = db.OpenRecordset("table1") With rs .addnew .Fields(0) = Range("d5").Value .Update End With End Sub