Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Несколько insert-ов (update,delete) в одной транзакции MY SQL [D7, MySQL]


Раиса ©   (2007-12-18 15:26:00) 

Необходимо в одной транзакции вставка (удаление, обновление) нескольких записей.
ADOConnection1.BeginTrans;
............
ADOQuery4.SQL.Add('insert into ...');
ADOQuery4.SQL.Add('insert into ...');
try
ADOQuery4.ExecSQL;
except
 ADOConnection1.RollbackTrans;
end;

При откатке в БД остаются записи от предыдущих вставок.

Что делать? В MS SQL таких проблем не замечено.


Andrey   (2007-12-18 18:47:00) [1]

>clickmaker ©   (18.12.07 18:37) [15]
>не факт ) светофор же не ее )
ох... ну тогда пусть не читает доку... и переходит на красный.
у всех своя дорога в ад.


clickmaker   (2007-12-18 18:37:00) [2]


> [14] Andrey ©   (18.12.07 18:04)
> >Раиса   (18.12.07 17:45) [12]
> И что? Ведь не переходишь улицу на красный свет?

не факт ) светофор же не ее )


Andrey   (2007-12-18 18:04:00) [3]

>Раиса   (18.12.07 17:45) [12]
И что? Ведь не переходишь улицу на красный свет?
Что мешает принять еще одно правило которое не ты придумала?


Kolan   (2007-12-18 17:50:00) [4]

> БД — не моя.

А СУБД?


Раиса   (2007-12-18 17:45:00) [5]

Не понимаю, какая документация?
БД - не моя. Надо написать клиентское приложение.


Johnmen   (2007-12-18 16:49:00) [6]

Всё, как обычно - лень смотреть в документацию...


sniknik   (2007-12-18 15:55:00) [7]

http://www.mysql.ru/docs/man/COMMIT.html

Если необходимо переключиться из режима AUTOCOMMIT только для выполнения одной последовательности команд, то для этого можно использовать команду BEGIN или BEGIN WORK:

BEGIN;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;

Отметим, что при использовании таблиц, не поддерживающих транзакции, изменения будут записаны сразу же, независимо от статуса режима autocommit.


т.е. по первому абзацу, если нет такой(/не работает) последовательность автокоммит сохранит первые(прошедшие) инсерты.  (BeginTrans; RollbackTrans; наверняка такую последовательность не делают)

и по третьему абзацу, даже если все нормально таблица у них в mysql тоже оказывается должна поддерживать транзакции.


Раиса   (2007-12-18 15:54:00) [8]

Спасибо всем ответившим.


sniknik   (2007-12-18 15:44:00) [9]

> Значит, транзакции не поддерживаются?
в пятой уже вроде есть. сходи к ним на сайт да посмотри. (mysql.ru)


sniknik   (2007-12-18 15:43:00) [10]

> Не сильна я в MY SQL
транзакции в mysql появились только в последних (платных (???)) версиях.  

> А из Дельфи даже корректные не проходят, ругается на ;
может разделитель ; лишний? или не поддерживает. скорее всего.
а MY FRONT (программа?) видать сама разбирает запрос и выполняет по отдельности.

> BeginTrans; RollbackTrans;
вот это замени sql запросами (BEGIN TRANSACTION, ...), и сразу станет ясно есть поддержка или нет. сервер вернет ошибку если что.


Раиса   (2007-12-18 15:41:00) [11]

запрос select version() выдал:
5.0.45-community-nt

MyISAM или InnoDB - не знаю.
Скорее 1.
Значит, транзакции не поддерживаются?


Раиса   (2007-12-18 15:41:00) [12]

запрос select version() выдал:
5.0.45-community-nt

MyISAM или InnoDB - не знаю.
Скорее 1.
Значит, транзакции не поддерживаются?


Правильный_Вася   (2007-12-18 15:35:00) [13]

не все версии MySQL поддерживают транзакции
команды посылать нужно по одной


Раиса   (2007-12-18 15:34:00) [14]

Не сильна я в MY SQL

Но в MY FRONT при корректной вставке проходят несколько insert-ов.

А из Дельфи даже корректные не проходят, ругается на ;


Andrey   (2007-12-18 15:29:00) [15]

И тип базы выбран поддерживающий транзакции?


Palladin   (2007-12-18 15:27:00) [16]

а MySQL поддерживает множественные инструкции?


Наверх

Титульная страница Поиск, карта сайта Написать письмо