0

我的 GUI 应用程序中有一个 QSqlQueryModel,它从 SAP HANA 数据库中检索数据并将其与 QTableView 小部件绑定。

我已经使用了 QODBC 驱动程序并在 Windows 中的 ODBC 数据源(64)位中配置了一个 ODBC 项。但是当我设置查询以选择维度表时,我可以获得数据但现在 db 中包含中文特征的单元格都是空白的在表视图中。

这是代码:

self._db = QSqlDatabase.addDatabase("QODBC3")
self._db.setDatabaseName(self._odbc+";SCROLLABLERESULT=TRUE;encoding='utf-8'")
self._db.setUserName(self._user)
self._db.setPassword(self._password)
# 打开数据库,如有报错则显示
if not self._db.open():
    QMessageBox.critical(self, "Database Error", self._db.lastError().text())
    return
# 获取要执行的SQL
_sql = self._generateSQLStatement()
self._model = QSqlQueryModel()
self._model.setQuery(_sql, self._db)
if self._model.lastError().isValid():
    QMessageBox.critical(self,"Database Error", self._model.lastError().text())
    return
self._ui.tableView.setModel(self._model)

这是结果截图:

带有红色矩形的单元格应该显示中国特色,但现在是空白的。

在此处输入图像描述

- - -更新 - - - -

好吧,我打开了一个 odbc 跟踪,发现了一个 sql 错误:

DIAG [S1000] [SAP AG][LIBODBCHDB DLL][HDBODBC] 一般错误;-10427 将参数/列 (2) 从数据类型 NVARCHAR 转换为 ASCII 失败 (-10427)

在这个错误中,似乎是中文特性无法转换为ascii。

但是为什么 QSqlQueryModel 会出现这个问题呢?我尝试使用带有中文的 SQLite 文件,而 QSqlQueryModel 可以检索中文数据。

4

1 回答 1

1

我检查了这篇文章:链接并跳转到 HANA ODBC 连接属性文档。

这是一个 HANA ODBC 问题。在 ODBC 配置中,应添加一个属性项并将其设置为 TRUE

CHAR_AS_UTF8

然后会显示汉字。

在此处输入图像描述

于 2021-09-08T05:55:35.487 回答