#c #sql #sqlite #qt
Вопрос:
Я пытаюсь обновить строку в базе данных SQLite с помощью QT, и мой запрос не выполняется, хотя я протестировал его в своем диспетчере баз данных, где он работает, поэтому я в замешательстве.
Вы найдете код ниже :
void DataBase::automatisationQteStock(Liste_Commande listeCommande){
if(db.isOpen()){
QSqlQuery query;
QSqlQuery query2;
QString querySelectIdCompo = "select Id_Composition from Carte_composition cc where Id_Carte = :idcarte ;";
QString queryUpdate = "update Stock set quantite = quantite - dose from (select quantite as dose, Id_Stock from Composition where Id_Composition = :tmp) where Stock.Id_Stock = (select Id_Stock from Composition where Id_Composition = :tmp);";
query.prepare(querySelectIdCompo);
query.bindValue(":idcarte", listeCommande.getId_Carte());
query.exec();
while(query.next()){
qint8 tmp = query.value("Id_Composition").toInt();
qDebug() << tmp;
query2.prepare(queryUpdate);
query2.bindValue(":tmp",tmp);
query2.exec();
qDebug() << "Transaction reussie";
}
}
else
{
qDebug() << "Connexion avec la database n'est pas établie";
}
}
Комментарии:
1.
UPDATE...FROM
Синтаксис поддерживается SQLite начиная с версии 3.33.0. Вероятно, вы используете более старую версию. Выполнитеselect sqlite_version();
для проверки.2. 3.34 .0-это один из моих БД
3. Он не подготавливает запрос 2 в цикле, в этом проблема, но я не понимаю, почему
4. Опубликуйте примеры данных обеих таблиц и ожидаемые результаты, чтобы уточнить, чего вы хотите. Я уверен, что это можно сделать с помощью простого оператора ОБНОВЛЕНИЯ без необходимости запроса SELECT и цикла WHILE.
5. Я исправил это, проблема заключалась в том, что в моем обновлении было несколько операторов, которые не поддерживаются ; Я разделил основной запрос на обновление на 3 последующих, и это сработало как заклинание