我有一个令人沮丧的问题。我有一个包含其他字符的字符串,不在此list中(检查链接)。我的字符串表示SQL查询。
这是我的字符串可以包含的示例:INSERT INTO test (description) VALUES ('≤ ≥ >= <=')
当我检查数据库时,该行已成功插入,但字符“≤”和“≥”将替换为“=”字符。 在数据库中,描述栏中的字符串看起来像“= =&gt; =&lt; =”。
对于大多数人物我都可以获得一个字符代码。我用谷歌搜索了这两个符号的字符代码,但我找不到一个。我的目标是检查我的字符串是否包含这两个字符,然后将其替换为“&gt; =”和“&lt; =”
===稍后编辑===
我试图检查for循环中的每个字符;
tmp = Mid $(str,i,1)
当我的for循环达到“≤”字符时,tmp将具有值“=”,因此Excel无法在VB字符串中读取此“≤”字符,然后当我检查字符代码时,我获取代码“=”(Chr(61))
答案 0 :(得分:0)
你能弄清楚&#34;≤&#34;的字符代码是什么和&#34;≥&#34;你的数据库字符集是?如果是这样,那么可以尝试用chrw(character_code)替换查询字符串中的两个字符。
我刚刚使用Excel作为我的数据库测试了你想要做的事情 - 它看起来工作正常。
编辑:假设您仍然卡在此处并寻求帮助 - 您可以确认您正在使用的数据库,以及&#34;描述&#34;的任何类型信息设置。你想在字段中插入字符串吗?
Edit2:我不熟悉SQL服务器,但不是你的&#34;描述&#34;字段设置为某种数据类型?如果是的话它是什么,它是否支持unicode字符? ncharvar,nchar似乎是支持Unicode的sql server数据类型的例子。
听起来你可能也想尝试添加一个&#34; N&#34;查询字符串中值的前缀 - 请参阅 Do I have use the prefix N in the "insert into" statement for unicode?&amp; how to insert unicode text to SQL Server from query window
Edit3:varchar没有资格正确呈现Unicode - 请参阅此处What is the difference between varchar and nvarchar?。你能切换到nvarchar吗?如上所述,您可能还希望在查询字符串中使用&#39; N&#39;为了充分发挥作用
Edit4:我不能多谈论sqlserver,但你在这里看到的是VBA如何显示角色,而不是它如何实际存储在内存中 - 这是底线。 VBA不会显示&#34;≤&#34;因为它不支持Unicode字符集。但是,它可能 - 而且确实 - 正确存储二进制表示。
有关此问题的任何证据,只需尝试从VBA将字符粘贴回Excel中的另一个单元格,然后您将检索原始字符 - 或者查看VBA中的二进制表示形式:
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
答案 1 :(得分:0)
如果我复制文本INSERT INTO test (description) VALUES ('≤ ≥ >= <=')
并将其粘贴到VBA编辑器中,则会变为INSERT INTO test (description) VALUES ('= = >= <=')
。
如果我将该文本粘贴到Excel单元格或Access表格的文本字段中,则会正确粘贴&#34;&#34;。
这似乎是支持字符代码的问题,我建议您查看this SO question。
但你程序中的是否来自该字符串,因为它无法在VBA中输入?
编辑:我用下面的代码尝试了一下,它就像一个把你的异国情调的角色从工作表转移到桌子上的魅力!
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