【发布时间】:2018-08-08 06:54:14
【问题描述】:
我们在使用 ADODB.RecordSet(MS ActiveX 数据对象 2.8 库)在 Excel 电子表格上显示 Clob 字段 (Oracle) 中的西里尔字母时遇到问题。
例如,我创建了一个包含一个 Clob 字段的表。我只插入了一行西里尔字母,并试图在 Excel 电子表格上显示该值。但是,文本显示为 ????在 Msgbox 和单元格中。这仅在从 Clob 字段中获取值时发生。如果我们从 varchar 查询它们,它工作正常。我已经尝试过 11.2.0.2.0 和 12.2.0.1.0。行为是相同的。我们可以做些什么来解决这个问题?
db 中的 NLS_CHARACTERSET 是 AL32UTF8。
VBA代码如下:
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值是多少? -
@hotfix,这无济于事,因为您已经从数据库中获得了
?,因此您无法转换任何内容。