В интернете нашла кучу подсказок, как в запрос insert
добавить определенные переменные из кода, но нашла лишь одно упоминание про вставку переменной, заданной ранее, в запрос select
, который к тому же у меня не работает. Перепробовала уже миллион разных вариантов, только в цикле еще все ответы не перебирала (надеюсь, до этого не дойдет).
QSqlQuery qry1;
qry1.prepare("select max(Missiles_id) from Missiles");
qry1.exec();
qry1.next();
int missId=qry1.value(0).toInt();
qDebug()<<missId;
qry=new QSqlQuery;
qry->prepare("SELECT * FROM Missiles WHERE Missiles_id="+missId);
qry->exec();
model->setQuery(*qry);
ui->tableViewMissiles->setModel(model);
ui->tableViewMissiles->horizontalHeader()-> resizeSections(QHeaderView::ResizeToContents);`
Думаю, ошибка в самом запросе, так как первый запрос все ищет правильно, находит максимальный индекс в таблице, а вот как его дальше передать - не знаю.
Смысл QSqlQuery::prepare именно в том, чтобы подготовить строку-запрос с отсутствующими параметрами для последующей подстановки.
qry->prepare("SELECT * FROM Missiles WHERE Missiles_id = ?");
qry->addBindValue(missId);
qry->exec();
Или
qry->prepare("SELECT * FROM Missiles WHERE Missiles_id = :id");
qry->bindValue(":id", missId);
qry->exec();
P.S:
Если подстановка не нужна, то prepare
не нужно использовать вообще. Таким образом, ваш код
QSqlQuery qry1;
qry1.prepare("select max(Missiles_id) from Missiles");
qry1.exec();
превращается в
QSqlQuery qry1("select max(Missiles_id) from Missiles");
// если передана непустая строка, exec вызывается автоматически
И еще, если вам надо передать результат одного запроса в следующий (не говоря уже о том, что все это можно превратить в один запрос средствами sql
), делать приведение типа QVariant -> int
не нужно. addBindValue
и bindValue
ожидают именно QVariant
.
Что у вас тут?
"SELECT * FROM Missiles WHERE Missiles_id="+missId
Строка char*
плюс целое число. Т.е. строка со сдвигом :) - например, если missId
равно 5, то это получается указатель на строку
"T * FROM Missiles WHERE Missiles_id="
Если уж передаете строку - то сначала сделайте верную строку. Вариантов масса. Не скажу, что именно хорошего есть в Qt, не знаю...
Например, вариант с буфером:
char query[150];
sprintf(query,"SELECT * FROM Missiles WHERE Missiles_id=%d",missId);
qry->prepare(query);
Вариант со строкой С++:
qry->prepare((string("SELECT * FROM Missiles WHERE Missiles_id=")+to_string(missId)).c_str());
Вобщем, главное - правильно приготовьте строку запроса.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть иконка (сделанная на html + css) и при наведении на неё курсора, выпадает подсказка
У меня есть слайдер на 4 картинкиКаждая занимает 100% блока
Нужна помощь! Ситуация такая, что есть боковое меню, с 4 пунктами и для каждого из них свой блокКак мне реализовать, чтобы при клике из каких-нибудь...