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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlQuery  (Прочитано 4551 раз)
Larry
Гость
« : Февраль 04, 2011, 00:06 »

Добрый вечер, форумчане! Возник такой вопрос. У меня есть 2 таблицы:
id | name - это поля первой таблицы
id | name | genre - это поля второй таблицы(их немного больше...)

первая таблица называется "genre", а вторая "film"... в поле name первой таблицы забиты жанры...Мне надо выбрать из таблицы "film" все строки в которых genre(поле второй таблицы) совпадают с name первой таблицы.

Вот что я сделал, но этот запрос не работает...
 
Код:
QSqlQuery   query;
QSqlRecord  record;
QString     strQuery = "select name from genre";

QStringList strListGenre;

query.exec(strQuery);
record = query.record();

while(query.next())
        strListGenre << query.value(record.indexOf("name")).toString();

foreach(QString str, strListGenre)
{
strQuery = "SELECT name FROM film WHERE genre = '" + str + "'";

if(query.exec(strQuery))
qDebug() << QObject::tr("Работает!");
else
qDebug() << QObject::tr("Не работает");

record = query.record();
QString film = query.value(record.indexOf("name")).toString();

qDebug() << film;
}
первый запрос вытягивает все данные из первой таблицы, а вот второй не работает, только выдает: QSqlQuery::value: not positioned on a valid record
« Последнее редактирование: Февраль 04, 2011, 00:08 от Larry » Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #1 : Февраль 04, 2011, 00:48 »

это надо делать средствами mysql и одним запросом, что-то типа:
Код
SQL
SELECT * FROM `film` WHERE genre IN (SELECT name FROM `genre`)
 
Записан

kubuntu/Win7/x64/NetBeans
Larry
Гость
« Ответ #2 : Февраль 04, 2011, 00:55 »

спасибо я попробую...а почему не получается так как я написал? вроде бы и ошибок нет и все проходит, но данные не вытягиваются?
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #3 : Февраль 04, 2011, 00:59 »

спасибо я попробую...а почему не получается так как я написал? вроде бы и ошибок нет и все проходит, но данные не вытягиваются?

Потому что надо позиционировать указатель на новые данные:
Код
C++ (Qt)
QString film;
...
if (query.exec(strQuery))
{
qDebug() << QObject::tr("Работает!");
if (query.next())
{
 record = query.record();
 film = query.value(record.indexOf("name")).toString();
 qDebug() << film;
}
}
else
qDebug() << QObject::tr("Не работает");
 

И вообще, раз уж стоит проверка на "Не работает", лучше заодно почитать почему именно:
Код
C++ (Qt)
if(query.exec(strQuery))
qDebug() << QObject::tr("Работает!");
else
qDebug() << tr("Ошибка:") << query.lastError().text();
 
 
« Последнее редактирование: Февраль 04, 2011, 02:46 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
Larry
Гость
« Ответ #4 : Февраль 04, 2011, 22:11 »

serg_hd, спасибо большое все работает Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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