Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QSqlQuery и транзакция
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
Majestio
Столкнулся с непонятной проблемой, хочу выполнить следующее:

BEGIN;
DELETE FROM public."RubricaNames" WHERE "Id"=20;
DELETE FROM public."Rubricator" WHERE "Group"=20;
DELETE FROM public."Client2Rubrica" WHERE "Rubrica"=20;
COMMIT;


Получается только вот так (проверки все опустил):

QSqlQuery *Query = new QSqlQuery(Global.DataBase);
Global.DataBase.transaction();
Query->prepare("DELETE FROM public.\"RubricaNames\" WHERE \"Id\"=:Id;");
Query->bindValue(":Id", QString::number(20));
Query->exec();
Query->prepare("DELETE FROM public.\"Rubricator\" WHERE \"Group\"=:Id;");
Query->bindValue(":Id", QString::number(20));
Query->exec();
Query->prepare("DELETE FROM public.\"Client2Rubrica\" WHERE \"Rubrica\"=:Id;");
Query->bindValue(":Id",QString::number(20));
Global.DataBase.commit();


Не могу выполнить все три DELETE одним запросом :(
Если пытаюсь все три DELETE написать одним запросом:

QSqlQuery *Query = new QSqlQuery(Global.DataBase);
Global.DataBase.transaction();
Query->prepare("DELETE FROM public.\"RubricaNames\" WHERE \"Id\"=:Id1; "
                         "DELETE FROM public.\"Rubricator\" WHERE \"Group\"=:Id2; "
                         "DELETE FROM public.\"Client2Rubrica\" WHERE \"Rubrica\"=:Id3; "
                         ");
Query->bindValue(":Id1", QString::number(20));
Query->bindValue(":Id2", QString::number(20));
Query->bindValue(":Id3", QString::number(20));
Query->exec();
Global.DataBase.commit();


... кричит об ошибке синтаксиса, в чем мой косяк, где почитать? :huh:
Алексей1153
так сделай три запроса внутри открытой транзакции

либо оформи хранимой процедурой
Majestio
Цитата(Алексей1153 @ 26.2.2013, 20:36) *
так сделай три запроса внутри открытой транзакции

Так, так и сделал - три запроса внутри транзакции работают.
Вопрос, почему это нельзя (или у меня просто не получается), это сделать одним запросом?
Алексей1153
Цитата(Majestio @ 27.2.2013, 0:28) *
Вопрос, почему это нельзя (или у меня просто не получается), это сделать одним запросом?

видимо, это нарушение синтаксиса одной строки запроса


а вот в случае хранимых процедур это не нарушение, там так можно
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.