在Oracle的VBA中显示为问号的西里尔字母
使用ADODB.RecordSet(MS ActiveX Data Objects 2.8库)在Excel电子表格上显示Clob字段(Oracle)中的西里尔字母时出现问题 例如,我创建了一个带有一个Clob字段的表。我只插入了一行西里尔字母,并试图在Excel电子表格上显示该值。但是,文本显示为????在Msgbox和单元格中。这仅在从Clob字段获取值时发生。如果我们从varchar查询它们,效果很好。我试过11.2.0.2.0和12.2.0.1.0。行为是一样的。我们能做些什么来解决这个问题 数据库中的NLS_字符集为AL32UTF8 VBA代码如下所示:在Oracle的VBA中显示为问号的西里尔字母,vba,oracle,excel,cyrillic,Vba,Oracle,Excel,Cyrillic,使用ADODB.RecordSet(MS ActiveX Data Objects 2.8库)在Excel电子表格上显示Clob字段(Oracle)中的西里尔字母时出现问题 例如,我创建了一个带有一个Clob字段的表。我只插入了一行西里尔字母,并试图在Excel电子表格上显示该值。但是,文本显示为????在Msgbox和单元格中。这仅在从Clob字段获取值时发生。如果我们从varchar查询它们,效果很好。我试过11.2.0.2.0和12.2.0.1.0。行为是一样的。我们能做些什么来解决这个问
Private Sub UnloadReportBtn_Click()
Dim RecordSet As ADODB.RecordSet
Set RecordSet = getTestClob
While RecordSet.EOF = False
MsgBox RecordSet.Fields("TEST1")
Cells(7, 7) = RecordSet.Fields("TEST1")
RecordSet.MoveNext
Wend
End Sub
Public Function getTestClob()
Dim Query As String
Query = "SELECT TEST1 FROM TEST_CLOB"
Set getTestClob = getRecordSet(Query)
End Function
Public Function getRecordSet(Query As String) As ADODB.RecordSet
Dim SQLCommand As ADODB.Command
Dim RecordSet As ADODB.RecordSet
Set SQLCommand = New ADODB.Command
Set SQLCommand.ActiveConnection = Connection
SQLCommand.CommandText = Query
SQLCommand.CommandType = adCmdText
SQLCommand.CommandTimeout = 0
Set getRecordSet = SQLCommand.execute
End Function
将您的
NLS_LANG
值设置为支持西里尔字母字符的字符集,例如CL8MSWIN1251
或AL32UTF8
例如,您可以通过环境变量来实现这一点
SET NLS_LANG=AMERICAN_RUSSIA.CL8MSWIN1251
或在您的注册表中,位于HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY\u%ORACLE\u HOME\u NAME%\NLS\u LANG
(32位),分别<代码>HKLM\SOFTWARE\ORACLE\KEY\u%ORACLE\u HOME\u NAME%\NLS\u LANG用于64位
有关更多详细信息,请参见。也许本文可以帮助您:您的
NLS_LANG
值是多少?@hotfix,这没有帮助,因为您已经从数据库中获取了?
,所以您无法转换任何内容。非常感谢!我添加了Env var NLS_LANG=rusian_rusia.CL8MSWIN1251,现在运行良好。