В интернете нашла кучу подсказок, как в запрос 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());
Вобщем, главное - правильно приготовьте строку запроса.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости