我的 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 可以检索中文数据。