我的GUI应用程序中有一个QSqlQueryModel,从SAP数据库检索数据,并将其绑定到一个QTableView小部件。
我使用了QODBC驱动程序,并在Windows.But中的ODBC数据源(64)位中配置了一个ODBC项,当我设置一个查询来选择维度表时,我可以得到数据,但是现在数据库中包含中国特色的单元格在tableView中都是空白的。
以下是代码:
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 S1000LIBODBCHDB DLL通用错误;-10427将参数/列(2)从数据类型转换为S1000LIBODBCHDB失败(-10427)
在这一错误中,中国特色似乎无法转化为ascii。
但是为什么这个问题出现在QSqlQueryModel上呢?我尝试将SQLite文件与中文结合使用,QSqlQueryModel可以检索中文数据。
发布于 2021-09-08 05:55:35
https://stackoverflow.com/questions/69097026
复制相似问题