Всем добрых суток!
Стоит следующая задача: По событию провести несколько последовательных запросов Insert или Update, но в случае чего - с откатом изменений. Что-то типа транзакции. Пытался сделать таким образом:
try
{adoquery->clear();
adoquery->add("INSERT....");
adoquery->ExecSQL();
adoquery->clear();
adoquery->add("UPDATE....");
adoquery->ExecSQL();
}
catch(...)
{
//не вышло
}
В этом случае, если первый запрос выполнился, а второй заклинило, то выскакивает исключение, но первый уже выполнился, что не допустимо для задачи..
Прочитал что надо использовать связку: BEGIN;COMIT;ROLLBACK; Но нигде не нашёл как использовать, мысли такие:
вариант 1:
try
{adoquery->clear();
adoquery->add("BEGIN;");
adoquery->add("INSERT....");
adoquery->add("UPDATE....");
adoquery->add("COMMIT;");
adoquery->ExecSQL();
}
catch(...)
{
//не вышло
adoquery->add("ROLLBACK;");
adoquery->ExecSQL();
}
Вариант 2:
try
{adoquery->clear();
adoquery->add("BEGIN;");
adoquery->ExecSQL();
adoquery->add("INSERT....");
adoquery->ExecSQL();
adoquery->clear();
adoquery->add("UPDATE....");
adoquery->ExecSQL();
adoquery->add("COMMIT;");
adoquery->ExecSQL();
}
catch(...)
{
adoquery->add("ROLLBACK;");
adoquery->ExecSQL();
}
Укажите верный путь, как надо использовать подобные вещи, если можно пример. СУБД postgres, среда Borland 2009