AC
May 18, 2023, 2:06 p.m.

Несколько запросов к БД в рамках одной транзакции

QT

Доброго времени суток.
Как правильно выполнить запросы в рамках одной транзакции ?

  1. db->getDatabase().transaction();
  2. QString str_error;
  3. QSqlQuery qry;
  4. //** 1
  5. qry.prepare("INSERT ...");
  6. if (qry.exec())
  7. str_error = str_error + qry.lastError().text();
  8. //** 2
  9. qry.prepare("INSERT ...");
  10. if (qry.exec())
  11. str_error = str_error + qry.lastError().text();
  12. //** 3
  13. qry.prepare("INSERT ...");
  14. if (qry.exec())
  15. str_error = str_error + qry.lastError().text();
  16.  
  17. if (str_error.isEmpty())
  18. db->getDatabase().commit();
  19. else
  20. db->getDatabase().rollback();

... к примеру если во втором запросе ошибка, то в любом случае выполняются 1 и 3.
Никак не могу разобраться.
Буду благодарен в помощи.

3
2
PB
  • May 18, 2023, 2:27 p.m.
  • (edited)
  • The answer was marked as a solution.
  1. db->getDatabase().transaction();
  2. QString str_error;
  3. QSqlQuery qry;
  4. bool success = true;
  5. try {
  6. qry.prepare("INSERT ...");
  7. if (!qry.exec()) {
  8. str_error = str_error + qry.lastError().text();
  9. success = false;
  10. }
  11. qry.prepare("INSERT ...");
  12. if (!qry.exec()) {
  13. str_error = str_error + qry.lastError().text();
  14. success = false;
  15. }
  16. qry.prepare("INSERT ...");
  17. if (!qry.exec()) {
  18. str_error = str_error + qry.lastError().text();
  19. success = false;
  20. }
  21. if (success)
  22. db->getDatabase().commit();
  23. else
  24. db->getDatabase().rollback();
  25. }
  26. catch (...) {
  27. db->getDatabase().rollback();
  28. throw;
  29. }
    AC
    • May 18, 2023, 3:36 p.m.

    Спасибо.

      Comments

      Only authorized users can post comments.
      Please, Log in or Sign up
      • Last comments
      • Evgenii Legotckoi
        March 9, 2025, 9:02 p.m.
        К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
      • VP
        March 9, 2025, 4:14 p.m.
        Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
      • ИМ
        Nov. 22, 2024, 9:51 p.m.
        Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
      • Evgenii Legotckoi
        Oct. 31, 2024, 11:37 p.m.
        Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
      • A
        Oct. 19, 2024, 5:19 p.m.
        Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html