Не работает выборка данных из базы при использовании ODBC драйвера.
Форум — Development
Столкнулся с проблемой неотображения данных при попытке выборки из базы по протоколу ODBC. Помогите, пожалуйста, советами по правильной настройке ODBC или изменения запроса, чтобы обойти проблему пустой выборки. Сразу оговорюсь, у меня почти нет опыта работы со Sql и Qt.
Код(чуть-чуть переделал простой тестовый пример из книги Макса Шлее):
#include <QApplication>
#include <QtSql>
#include <QSqlTableModel>
#include <QTableView>
bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
QString dbFullName = "Driver={PostgreSQL};Server=localhost;Port=5432;Database=testQt.db;Uid=test;Pwd=test;";
db.setDatabaseName(dbFullName);
if (!db.open())
{
qDebug() << "Cannot open database: " << db.lastError();
return false;
}
return true;
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
if (!createConnection())
return -1;
QTableView tableView;
QSqlTableModel model;
model.setTable("addressbook");
model.select();
qDebug() << model.lastError().text();
tableView.setModel(&model);
tableView.show();
return app.exec();
}
На выходе получаю:
QODBCDriver::checkHasSQLFetchScroll: Warning - Driver doesn't support scrollable result sets, use forward only mode for queries
"[unixODBC][Driver Manager]Driver does not support this function QODBC3: QODBCResult::reset: Невозможно установить «SQL_CURSOR_STATIC» атрибутом выражение. Проверьте настройки драйвера ODBC"
Использование QSqlQuery с setForwardOnly(true) не помогло. Если задать родной драйвер базы, то данные отображаются корректно. Настройки в /etc/odbcinst.ini стандартные. Установлены unixODBC версии 2.3.2 (так же пробовал 2.3.4), Qt5.6.1.
По идее нужно копать в сторону настроек драйвера, но не знаю, что в них нужно изменить.