![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не выполняется весь набор операций в транзакции [D7, MSSQL]
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
------
попробуй во всяком случае