Russian Qt Forum
Ноябрь 25, 2024, 16:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: query.next()  (Прочитано 10095 раз)
olejOK17
Гость
« : Март 04, 2015, 17:54 »

Первый раз работаю, точнее пытаюсь работать с SQL в Qt. Подскажите почему query.next() может постоянно false возвращать. Соединение с сервером устанавливается, а вот query.next() снова и снова false. Не ругайтесь если что. Молодой, криворукий.
Код:
{
    ui->setupUi(this);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", QString("mydb"));
    db.setPort(3306);
    db.setHostName("***");
    db.setDatabaseName("***");
    db.setUserName("***");
    db.setPassword("***");
    db.setConnectOptions();

    QStandardItemModel *model = new QStandardItemModel;
    QStandardItem *item;

    //Заголовки столбцов
    QStringList horizontalHeader;
    horizontalHeader.append("1");
    horizontalHeader.append("2");

    //Заголовки строк
    QStringList verticalHeader;
    verticalHeader.append("1");
    verticalHeader.append("2");
    verticalHeader.append("3");
    verticalHeader.append("4");

    model->setHorizontalHeaderLabels(horizontalHeader);
    model->setVerticalHeaderLabels(verticalHeader);

    QSqlQuery query;
    query.exec("SELECT * FROM Theme");

    for(int i=0; i<3; i++) {
      for(int j=0; j<3; j++) {
        if (query.next()) {
          QString name = query.value(0).toString();
          item = new QStandardItem(name);
          model->setItem(i, j, item);
        }
      }
    }

    ui->tableView->setModel(model);

    ui->tableView->resizeRowsToContents();
    ui->tableView->resizeColumnsToContents();
}
Записан
Hrundel
Гость
« Ответ #1 : Март 04, 2015, 17:59 »

Сам пока ни разу не писал для SQL, но мне кажется немного не логично, что базы не существует, а ты пытаешься делать к ней запросы.
Лично мне все это кажется странным:

Код
C++ (Qt)
db.setHostName("***");
db.setDatabaseName("***");
db.setUserName("***");
db.setPassword("***");
 

Записан
olejOK17
Гость
« Ответ #2 : Март 04, 2015, 18:01 »

Сам пока ни разу не писал для SQL, но мне кажется немного не логично, что базы не существует, а ты пытаешься делать к ней запросы.
Лично мне все это кажется странным:

Код
C++ (Qt)
db.setHostName("***");
db.setDatabaseName("***");
db.setUserName("***");
db.setPassword("***");
 



 Там все прописано, я же говорю - соединение устанавливается. db.open(); - true
« Последнее редактирование: Март 04, 2015, 18:02 от olejOK17 » Записан
Hrundel
Гость
« Ответ #3 : Март 04, 2015, 18:18 »

Ааааа, теперь понял, это ты звездочки только здесь указываешь, а в реальном коде нормальные имена хоста и базы прописаны.
Ок, тогда понятно. А есть возможность проверить, что возвращает

Код
C++ (Qt)
query.exec("SELECT * FROM Theme");

?

В доках написано, что  query должен быть в активном состоянии, и isSelect должен возвращать true перед вызовом.
Попробуй проверить на соответствие.
« Последнее редактирование: Март 04, 2015, 18:22 от Hrundel » Записан
Hrundel
Гость
« Ответ #4 : Март 04, 2015, 18:25 »

И, кстати, попробуй для начала установить query.first() и получить его значение.
Записан
olejOK17
Гость
« Ответ #5 : Март 04, 2015, 18:44 »

И, кстати, попробуй для начала установить query.first() и получить его значение.
QSqlQuery::exec: database not open
Вот такие дела... А db.open() возвращает true. Где косяк...
Записан
Hrundel
Гость
« Ответ #6 : Март 04, 2015, 19:01 »

В хосте скорее всего. С хостами всегда геморой.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #7 : Март 04, 2015, 19:54 »

И, кстати, попробуй для начала установить query.first() и получить его значение.
QSqlQuery::exec: database not open
Вот такие дела... А db.open() возвращает true. Где косяк...
Вы создали и открыли соединение с именем mydb, а в query используете дефолтное.
Либо уберите из addDatabase имя соединения, или в query указывайте правильное соединение.
Записан
Hrundel
Гость
« Ответ #8 : Март 04, 2015, 20:19 »

Вы создали и открыли соединение с именем mydb, а в query используете дефолтное.
Либо уберите из addDatabase имя соединения, или в query указывайте правильное соединение.

Ну вот, слова про хост беру обратно.  Подмигивающий
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #9 : Март 05, 2015, 12:14 »

Как сказал Old
Код:
QSqlQuery query(db);
спасет отца русской демократии...
Ну и
Код:
db.open()
никто не отменял (в коде из первого поста не нашел)
« Последнее редактирование: Март 05, 2015, 12:17 от kai666_73 » Записан
olejOK17
Гость
« Ответ #10 : Март 05, 2015, 13:34 »

Как сказал Old
Код:
QSqlQuery query(db);
спасет отца русской демократии...
Ну и
Код:
db.open()
никто не отменял (в коде из первого поста не нашел)
Не спасло. Таже проблема
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #11 : Март 05, 2015, 17:33 »

Как сказал Old
Код:
QSqlQuery query(db);
спасет отца русской демократии...
Ну и
Код:
db.open()
никто не отменял (в коде из первого поста не нашел)
Не спасло. Таже проблема
То есть query.exec(...) возвращает false, а в сообщении об ошибке Db not opened?
Выложите ка минимальный компилируемый проект... а то гадать можно долго )
Записан
torwig
Самовар
**
Offline Offline

Сообщений: 134



Просмотр профиля
« Ответ #12 : Март 05, 2015, 17:41 »

Может нет данных в таблице?
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #13 : Март 05, 2015, 17:47 »

Может нет данных в таблице?
Не... query.exec(...) не true однако, то есть до выборки еще не добрались
Записан
Bepec
Гость
« Ответ #14 : Март 05, 2015, 19:13 »

Глупый будет гадать, умный скажет - лови sqlerror и выводи Веселый
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.204 секунд. Запросов: 23.