Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QSqlQuery не выполняется. Ошибок не вызывает.
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
lrx2
Доброго времени суток.
Работаю с БД PSQL через QTableView + QSqlQueryModel.
На view данные выводятся при запросах
model->setTable('table');
model->select();


Соединение с БД производится сл. образом:
db = QSqlDatabase::addDatabase("QPSQL");
    if(!db.isValid()){
        QString qs;
        qs.append(tr("DLL драйверов для PostgreSQL не найдены:\n\n'%1;'").arg(db.lastError().text()));
        qs.append(tr("\n\nDll должны располагаться по одному из путей : \n\n%1\n\n\n%2").arg(QApplication::libraryPaths()[0],QApplication::libraryPaths()[1]));
        FATAL(qs);
        return;
    }

    db.setHostName("localhost");
    db.setDatabaseName("SHOP");
    db.setUserName("postgres");
    db.setPassword("7777777");
    db.setPort(5432);

    if (!db.open()){
        FATAL(tr("Невозможно подключиться к указанной БД:\n\n%1::%2").arg(db.hostName(), db.databaseName()));
        return;
    }


В слоте для нажатия на кнопку стоит сл. код:
QSqlQuery sql(db);
    sql.exe(tr("select * from categories"));
    if(!sql.isActive())FATAL(tr("Not active"));    
        QString qs;                
        qs.append(tr("'%1'\n\n\nQuo=%2; \n'%3'")
                    .arg(sql.record().value(1).toString())
                    .arg(sql.numRowsAffected())
                    .arg(sql.lastError().driverText()));

        if(sql.lastError().type() == QSqlError::NoError){
            qs.append(tr("no error"));
        }
        FATAL(qs);

        sql.clear();

Ежель запрос не корректный - пишет, что не isActive - тут все хорошо.

Никаких ошибок не выводится, если запрос корректный, но при этом и данных никаких не получается.
*ЗЫ: запрос создаётся и выполняется уже после соединения с базой, ессно.

Что не так?

С уважением, Олег.
lrx2
Цитата(lrx2 @ 16.12.2011, 11:33) *
Доброго времени суток.
Работаю с БД PSQL через QTableView + QSqlQueryModel.
На view данные выводятся при запросах
model->setTable('table');
model->select();


Соединение с БД производится сл. образом:
db = QSqlDatabase::addDatabase("QPSQL");
    if(!db.isValid()){
        QString qs;
        qs.append(tr("DLL драйверов для PostgreSQL не найдены:\n\n'%1;'").arg(db.lastError().text()));
        qs.append(tr("\n\nDll должны располагаться по одному из путей : \n\n%1\n\n\n%2").arg(QApplication::libraryPaths()[0],QApplication::libraryPaths()[1]));
        FATAL(qs);
        return;
    }

    db.setHostName("localhost");
    db.setDatabaseName("SHOP");
    db.setUserName("postgres");
    db.setPassword("7777777");
    db.setPort(5432);

    if (!db.open()){
        FATAL(tr("Невозможно подключиться к указанной БД:\n\n%1::%2").arg(db.hostName(), db.databaseName()));
        return;
    }


В слоте для нажатия на кнопку стоит сл. код:
QSqlQuery sql(db);
    sql.exe(tr("select * from categories"));
    if(!sql.isActive())FATAL(tr("Not active"));    
        QString qs;                
        qs.append(tr("'%1'\n\n\nQuo=%2; \n'%3'")
                    .arg(sql.record().value(1).toString())
                    .arg(sql.numRowsAffected())
                    .arg(sql.lastError().driverText()));

        if(sql.lastError().type() == QSqlError::NoError){
            qs.append(tr("no error"));
        }
        FATAL(qs);

        sql.clear();

Ежель запрос не корректный - пишет, что не isActive - тут все хорошо.

Никаких ошибок не выводится, если запрос корректный, но при этом и данных никаких не получается.
*ЗЫ: запрос создаётся и выполняется уже после соединения с базой, ессно.

Что не так?

С уважением, Олег.


*Вопрос решён - надо было вызвать .next()
Был сбит с толку, что numRowsAffected() всегда возвращал 0.
Зато size() работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.