Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не получается сделать RollBack 
:(
    Опции темы
Corba
Дата 12.1.2006, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 25.10.2005

Репутация: нет
Всего: нет



Вообщем реализовал след. конструкцию:

Код

lSaved:=True;
if cds1.ChangeCount>0 then
    begin
      dbxLio.StartTransaction( hTrans );
      with cds1 do
        try
          ApplyUpdates(0);
          dbxLio.Commit( hTrans );
        except
           dbxLio.Rollback( hTrans );
          lSaved := False;
        end; // with
    end;
//.......

If (lSaved) then ShowMessage('Всё ОК!')
else ShowMessage('Error!') ;


Я удивился, но except вызывается только когда Oracle не доступен, если же dbxLio.StartTransaction( hTrans ); прошёл, то даже ярые ошибки в SQL - скриптах не способны вызвать exception, при этом конечно же ничего в БД не сохраняется, но естественно выстреливает сообщение "Всё ОК!". Подскажите как мне правильно обработать ошибку, которая может возникнуть при неправильности скрипта. Заранее спасибо.
ЗЫ
Использую Delphi 7 & Oracle 9

Это сообщение отредактировал(а) Girder - 13.1.2006, 11:43
PM MAIL   Вверх
<Spawn>
Дата 13.1.2006, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 2
Всего: 64



А что за компоненты используются?


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Corba
Дата 13.1.2006, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 25.10.2005

Репутация: нет
Всего: нет



используются компоненты dbexpress

Я уже сам нашёл решение заключается оно в следующем:
В обработчике BeforeUpdateRecord провайдера использую конструкцию:

Код

 try
//Sql запросы и другой код
Applied:=True;
except
    Applied:=False;
end;
...

При этом в случае успешного выполнения кода функция ApplyUpdates(0) вернёт 0 иначе значение больше 0, остаётся лишь сворганить условие.

Вот так приобразится код. В этом случае except отрабатывает без выкрутасов.
Код

if cds1.ChangeCount>0 then
    begin
      dbxLio.StartTransaction( hTrans );
      with cds1 do
        try
          if( ApplyUpdates(0) > 0 ) then
            Abort;
          dbxLio.Commit( hTrans );
        except
          dbxLio.Rollback( hTrans );
          lSaved := False;
        end; // with






PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.