LINUX.ORG.RU

Сообщения IceRain

 

Не работает выборка данных из базы при использовании ODBC драйвера.

Столкнулся с проблемой неотображения данных при попытке выборки из базы по протоколу 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.

По идее нужно копать в сторону настроек драйвера, но не знаю, что в них нужно изменить.

 , ,

IceRain
()

RSS подписка на новые темы