gpt4 book ai didi

vba - 西里尔字母在 Oracle 的 VBA 中显示为问号

转载 作者:行者123 更新时间:2023-12-04 22:32:25 26 4
gpt4 key购买 nike

我们在使用 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支持西里尔字符的字符集的值,例如CL8MSWIN1251AL32UTF8 .

您可以通过环境变量执行此操作,例如

SET NLS_LANG=AMERICAN_RUSSIA.CL8MSWIN1251

或在您的注册表中 HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG (对于 32 位),分别。 HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG对于 64 位。

另见 OdbcConnection returning Chinese Characters as "?"更多细节。

关于vba - 西里尔字母在 Oracle 的 VBA 中显示为问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51740281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com