crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QSqlQuery не выполняется. Ошибок не вызывает.
lrx2
  опции профиля:
сообщение 16.12.2011, 11:33
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 7.12.2011
Пользователь №: 3050

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток.
Работаю с БД 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
  опции профиля:
сообщение 16.12.2011, 17:43
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 7.12.2011
Пользователь №: 3050

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(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() работает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 7:18