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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как результат sql запроса перевести в переменную?  (Прочитано 7422 раз)
Alexsandr
Гость
« : Декабрь 26, 2011, 07:59 »

Такая проблема, существует sql запрос который выводит число, которое нужно перевести в переменную. Как это можно реализовать?
У меня конечно есть "кривой" способ, но хочется всё сделать правильно. "Кривой" способ выглядит так:

QTableView *tableview = new QTableView;
QVariant z1;
QString z;
QModelIndex bz;
Count_row = new QSqlQueryModel;
    QSqlQuery count_row = QString("SELECT COUNT(Decision.Decision) FROM блаблабла WHERE блаблабла");
    Count_row->setQuery(count_row);
    tableview->setModel(Count_row);
bz = tableview->model()->index(0, 0, QModelIndex());
 z1 = tableview->model()->data(bz, Qt::DisplayRole);
 z = z1.toInt();
 
По сути сдесь у нас имеется tableview нулевого размера, из корого уже беруться значения и переводяться в переменну. Но как это сделать менее криво я незнаю. Подскажите плз)
Записан
Whiplash
Гость
« Ответ #1 : Декабрь 26, 2011, 09:06 »

О, йуный падаван, QSqlQuery силу используй ты.
Цитировать
QSqlQuery q(db->db);
    QByteArray templ;
    if(q.exec("select v_text from lib_values where id_att=55 and id_lib=23437")){
        if(q.next()) templ=q.value(0).toByteArray();
    }

Вот кода рабочего кусок тут.
Записан
Syveren
Гость
« Ответ #2 : Декабрь 26, 2011, 09:08 »

Код:
QSqlQuery query;
query.exec("SELECT COUNT(*) FROM блаблабла WHERE блаблабла");
if(!query.isActive())
{
//ошибка
qDebug()<<query.lastError().text();
...
}
query.first();
int count = query.value(0).toInt();
Записан
Alexsandr
Гость
« Ответ #3 : Декабрь 26, 2011, 09:51 »

Вот спасибо, всё работает! =)
Записан
Alexsandr
Гость
« Ответ #4 : Декабрь 26, 2011, 10:00 »

Ввиду того, что я в qt нуп, возник еще 1 вопрос касаемо этой темы, допустим у меня выводиться не одна строка, а несколько. То, как я понимаю:
Код:
QSqlQuery query;
query.exec("SELECT COUNT(*) FROM блаблабла WHERE блаблабла");
if(!query.isActive())
{
//ошибка
qDebug()<<query.lastError().text();
...
}
query.first();
int count = query.value(0).toInt();

уже не спасёт.
К примеру:
Код:
QSqlQuery selectt;
 selectt.exec("SELECT Decision FROM блаблабла WHERE блаблабла");
 selectt.first();
 Decision = selectt.value(0).toString();
 
 ui->textEdit_2->setText(Decision);
Выводит только первую строку, хотя сам запрос может выводить по несколько строк. И вот чтобы использовать, чтобы например номер строки задать переменной а потом уже менять саму переменную (нажатием кнопки например) и выводилась нужная строка.
Записан
Syveren
Гость
« Ответ #5 : Декабрь 26, 2011, 11:11 »

Если я правильно вас понял, то:
Код:
QSqlQuery q;
q.exec("SELECT num,text,...,data FROM ... WHERE ...");
while(q.next())
{
     int number = q.value(0).toInt();
     QString name = q.value(1).toString();
    ...
     QByteArrey by = q.value(q.record().count()-1).toByteArray();
}
Цикл while(q.next()) {} проработает столько раз, сколько получилось строк в результате запроса
(Вместо q.first() в предыдущем ответе, можно использовать q.next(); результат один и тотже)
« Последнее редактирование: Декабрь 26, 2011, 11:28 от Syveren » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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