LINUX.ORG.RU

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

 , ,


0

3

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

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

Используй родной драйвер, пробему совместимости реши ручной поддержкой разных серверов СУБД или пиши под windows, там ODBC работает хорошо

pup_kin ()
Ответ на: комментарий от pup_kin

К сожалению, нужно заставить работать именно через odbc и в линукс...

IceRain ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.