Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.06;
Скачать: CL | DM;

Вниз

Обработка транзакций   Найти похожие ветки 

 
Serge1   (2004-05-13 12:51) [0]

Помогите разобраться!
Почему то не сохраняется результат выполнения запросов.
Программа работает с базой данных MS SQL SERVER 7.0.
Фрагмент программы:

procedure TFormRouteSheetEdit.ToolButtonSaveClick(Sender: TObject);
var
  Zapros: TADOQuery;
begin
  Zapros:=TADOQuery.Create(FormRouteSheetEdit);
  Zapros.Connection:=ADOConnection1;
  Zapros.Connection.BeginTrans;
  Zapros.SQL.Clear;
  Zapros.SQL.Add("UPDATE [Маршрутные листы]");
  Zapros.SQL.Add("SET ... ");
  Zapros.SQL.Add("WHERE Номер = ...");
  try
     Zapros.ExecSQL;
  except
     Zapros.Connection.RollbackTrans;
     Zapros.Free;
     exit;
  end;
  Zapros.SQL.Clear;
  Zapros.SQL.Add("DELETE FROM [Табличная часть маршрутных листов]");
  Zapros.SQL.Add("WHERE ([Номер маршрутного листа] = ... )");
  Zapros.ExecSQL;
  for NumberOfLine:=1 to N do begin
     Zapros.SQL.Clear;
     Zapros.SQL.Add("INSERT INTO [Табличная часть маршрутных листов]");
     Zapros.SQL.Add("([Номер маршрутного листа], ...");
     Zapros.SQL.Add("VALUES ("..., ...");
     try
        Zapros.ExecSQL;
     except
        if Zapros.Connection.InTransaction
          then Zapros.Connection.RollbackTrans;
        Zapros.Free;
        exit;
     end;
  end;
  if Zapros.Connection.InTransaction
    then Zapros.Connection.CommitTrans;
// После этого ничего не сохраняется !!!
  Zapros.Free;
  Close;
end;


 
Курдль ©   (2004-05-13 12:53) [1]

А зачем фрикать Zapros по Except?


 
Курдль ©   (2004-05-13 12:59) [2]

А в пошаговом режиме программа выходит на
then Zapros.Connection.CommitTrans;?


 
Serge1   (2004-05-13 12:59) [3]

Для того, чтобы освободить память занимаемую Zapros"ом.


 
Serge1   (2004-05-13 13:01) [4]

Да выходит и then Zapros.Connection.CommitTrans; выполняется, а результат ноль.


 
Курдль ©   (2004-05-13 13:08) [5]

Перехватить запрос на сервер естьчем? Или, на крайняк, вывести в Memo текст перед Zapros.ExecSQL; и попробовать его прокатать через интерактивный SQL-инструмент.


 
sniknik ©   (2004-05-13 13:28) [6]

замени
BeginTrans/CommitTrans/RollbackTrans
на анологичное в SQL эквиваленте. ;о)
BEGIN TRANSACTION/...

а TADOQuery на TADOCommand

+ можеш обьеденить некоторые команды в пакеты (старт транзакции с первой командой к примеру ... ets)


 
Johnmen ©   (2004-05-13 13:30) [7]

>Serge1  

Можешь себе представить, что будет, если отработает первый except ? :)))
Общий подход (описанный кстати в хелпе):
<стартуем транзакцию>
try
 <модификация данных в БД>
 ...
 <подтверждаем транзакцию>
except
 <откатываем транзакцию>
 end;


 
Курдль ©   (2004-05-13 13:34) [8]


> Можешь себе представить, что будет, если отработает первый
> except ? :)))

А что? Откатится транзакция, освободятся ресурсы и процедура завершится.
Ему нельзя <подтверждаем транзакцию> до того, как 2 записи в разных таблицах не уйдут к БД!


 
Johnmen ©   (2004-05-13 13:38) [9]

>А что? Откатится транзакция, освободятся ресурсы и процедура завершится.

Да ? Не всё так просто...
Вот скажи для начала, в рамках какой транзакции будет выполнено
Zapros.ExecSQL;
на
Zapros.SQL.Add("DELETE ...
?


 
Курдль ©   (2004-05-13 13:47) [10]


> Вот скажи для начала, в рамках какой транзакции будет выполнено
> Zapros.ExecSQL;

Единственной и неповторимой, открытой с помощью Zapros.Connection.BeginTrans;


 
Johnmen ©   (2004-05-13 13:59) [11]

>Единственной и неповторимой, открытой с помощью Zapros.Connection.BeginTrans;

Да ? По-моему она уже завершена на данный момент откатом...
:)))


 
MU   (2004-05-13 14:14) [12]

>>Johnmen ©
Там Exit стоит, нет?


 
Johnmen ©   (2004-05-13 14:24) [13]

>>MU
Там Exit стоит, да!



Страницы: 1 вся ветка

Текущий архив: 2004.06.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
14-1084980190
DillerXX
2004-05-19 19:23
2004.06.06
Звуки звуки пуки, блин...


3-1084691038
Cherepovets
2004-05-16 11:03
2004.06.06
Параметрический запрос


9-1075879122
Wild
2004-02-04 10:18
2004.06.06
Вода


3-1084691280
Rouse_
2004-05-16 11:08
2004.06.06
Очень быстрое добавление изменение записи...


14-1085313677
GanibalLector
2004-05-23 16:01
2004.06.06
почему так ???