crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QSqlQuery и транзакция, Использую PostgreSQL 9.2.1, Qt 4.8.4
Majestio
  опции профиля:
сообщение 26.2.2013, 20:31
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 13.2.2013
Пользователь №: 3710

Спасибо сказали: 1 раз(а)




Репутация:   1  


Столкнулся с непонятной проблемой, хочу выполнить следующее:

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
  опции профиля:
сообщение 26.2.2013, 20:36
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


так сделай три запроса внутри открытой транзакции

либо оформи хранимой процедурой
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Majestio
  опции профиля:
сообщение 26.2.2013, 21:28
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 13.2.2013
Пользователь №: 3710

Спасибо сказали: 1 раз(а)




Репутация:   1  


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

Так, так и сделал - три запроса внутри транзакции работают.
Вопрос, почему это нельзя (или у меня просто не получается), это сделать одним запросом?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 26.2.2013, 21:37
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(Majestio @ 27.2.2013, 0:28) *
Вопрос, почему это нельзя (или у меня просто не получается), это сделать одним запросом?

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


а вот в случае хранимых процедур это не нарушение, там так можно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 17:04