Проблема с обновлением Qt для Sqlite с использованием нескольких запросов

#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 последующих, и это сработало как заклинание