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

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

Не выполняется весь набор операций в транзакции [D7, MSSQL]


Страницы:   1 2 3

elshad_s ©   (2003-12-17 17:34:00) 

Например есть такой отрывок текста программы:

TADOConnection.BeginTrans;
try
{Операция_1,
Операция_2,
Операция_3}
TADOConnection.CommitTrans;
except
------

Под "Операция_1,2,3" подразумевается добавление записей в таблицы T1, T2 и T3 соответственно.

Проблема в том что, после TADOConnection.CommitTrans только итог "Операция_3" вностися в Базу данных (в таблицу T3) а результаты предыдущих операций игнорируются. То есть Commit действует только на последнюю операцию.

СУБД - SQL Server Desktop Edition
Провайдер - Microsoft OLE DB Provider for SQL Server

P.S. В Access 97 все работает нормально:)


Кщд   (2003-12-18 06:08:00) [41]

возможно дело в transisolation?


elshad_s   (2003-12-17 19:15:00) [42]

To Silver Alex

>>значит первые две операции не прошли, надо проверять возвращаемое значение

Дело как раз в том, что выполнив "Операция_1" я запускаю Select Query, в котором добавленная запись сидит - логически. Тоже самое происходит после "Операция_2" и "Операция_3". В заключении отдав команду CommitTrans, для физической записи, видим что в базе отражается только результат "Операция_3" все остальные данные теряются. Самое интересное то, что я проверял тоже самое в Access 97 и все проходило без всяких проблем.


Silver Alex   (2003-12-17 18:30:00) [43]

значит первые две операции не прошли, надо проверять возвращаемое значение

TADOConnection.BeginTrans;
try
Операция_1.ExecProc;
if Операция_1.Parameters.ParamByName("@RETURN_VALUE").Value <>0 then
raise Exception.Create("Error");
...
TADOConnection.CommitTrans;
except
TADOConnection.RollbackTrans;
------


elshad_s   (2003-12-17 18:22:00) [44]

Спасибо за ответ, но дело в том что, в моем конкретном случае нет возможности обьединения операций в одну комманду. Так как, то что добавляется в "Операция_2" зависит от результата предыдущей операции. По этому в блоке команд транзакции с начала выполняется INSERT Query(Операция_1), потом идут вычисления, а после уже идет 2-ой INSERT Query(Операция_2) и тд.


sniknik   (2003-12-17 17:41:00) [45]

в MSSQL
можно так
try
ADOCommand.CommandText:=
"begin transaction "+
"Операция_1 "+
"Операция_2 "+
"Операция_3 "+
"commit transaction";
ADOCommand.Execute;
except
------
попробуй во всяком случае


Страницы:   1 2 3

Наверх

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