Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перехват исключения: Record already locked by this session

12K
12 мая 2007 года
yura-007
45 / / 03.04.2007
Record already locked by this session – каким Exception перехватить эту исключительную ситуацию?
Нарыл тут: http://www.swissdelphicenter.ch/torry/showcode.php?id=37 список каких-то ошибок, есть там и моя: $2807 (10247) = Record already locked by this session, но я не пойму что означает это: $2807 (10247), адрес ошибки или что это такое и зачем оно нужно?
303
14 мая 2007 года
makbeth
1.0K / / 25.11.2004
Используешь BDE? $2807 - внутренний код ошибки BDE. Отлавливай EDBEngineError. У него есть свойство Errors - список ошибок BDE, каждый экземпляр - объект класса TDBError - в нем содержится описание ошибки.
Подробнее смотри в Help.
12K
14 мая 2007 года
yura-007
45 / / 03.04.2007
Цитата: makbeth
Используешь BDE? $2807 - внутренний код ошибки BDE. Отлавливай EDBEngineError. У него есть свойство Errors - список ошибок BDE, каждый экземпляр - объект класса TDBError - в нем содержится описание ошибки.
Подробнее смотри в Help.



Совершенно верно, использую BDE. Пробывал я вот так:

Код:
try

  /* BDE hardcode */

except  
  on E: EDBEngineError do begin

        /* BDE damn */

  end
end

и не получается, Отключал Debugger Options - Stop on Delphi exceptions, разницы ни какой. Надо справку поглядеть, мож вычитаю что...
10
14 мая 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: yura-007
Record already locked by this session – каким Exception перехватить эту исключительную ситуацию?


Если это не очередная багофича BDE, скорее всего, ошибка наведённая. Ищи в других местах, где утекает память и/или разрушается стек.

303
15 мая 2007 года
makbeth
1.0K / / 25.11.2004
Цитата: yura-007
Совершенно верно, использую BDE. Пробывал я вот так:
Код:
try

  /* BDE hardcode */

except  
  on E: EDBEngineError do begin

        /* BDE damn */

  end
end
и не получается, Отключал Debugger Options - Stop on Delphi exceptions, разницы ни какой. Надо справку поглядеть, мож вычитаю что...


А попробуй:

Код:
try

  /* BDE hardcode */

except  
  on E: Exception do begin

        ShowMessage(E.ClassName + ': ' + E.Message);

  end
end

Так по крайней мере узнаешь, какого типа исключение возникает...
Вполне возможно, что исключение возникает не в этом блоке. Тогда можно сделать следующее:
Кинь на форму компонент TApplicationEvents, у него создай обработчик события OnException:
 
Код:
procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception);
begin
    ShowMessage(E.ClassName + ': ' + E.Message); //*
end;

На строке * поставь breakpoint. Когда отладчик остановиться на нем, посмотри стек вызовов.
12K
15 мая 2007 года
yura-007
45 / / 03.04.2007
Спасибо большое за совет. В общем-то сделал я вот так:
Цитата:
Кинул на форму компонент TApplicationEvents, у него создал обработчик события OnException:
Код:
procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception);
begin
ShowMessage(E.ClassName + ': ' + E.Message); //*
end;


и в результате стало вместо прежнего сообщения об ошибки выпрыгивать другое(я его прикрепил), которое мне больше нравится, да ещё изменив в нём вот это: E.ClassName + ': ' + E.Message, на: ‘Ошибка, нет доступа!’, я остался доволен. Если будет нормально работать, то пусть так и остаётся, если конечно это сообщение не будет вылетать, вместо перехваченных мною исключений в других формах, а на этой форме у меня только такое исключение возможно.
По поводу этого:

Код:
try

  /* BDE hardcode */

except  
  on E: Exception do begin

        ShowMessage(E.ClassName + ': ' + E.Message);

  end
end
так я тоже пробовал и безрезультатно.
А это:
Цитата:
На строке * поставь breakpoint. Когда отладчик остановиться на нем, посмотри стек вызовов


для меня пока еще слишком сложно, что такое breakpoint, это когда слева строки красную точку ставишь и строка красной становится, или что это? И как посмотреть стек вызовов?
Не нужно с меня смеяться, я пока ещё только учусь! Ещё раз спасибо!

12K
15 мая 2007 года
yura-007
45 / / 03.04.2007
Ой, не такой способ не из лучших, если это сообщение выскачело, то скачет после постоянно! В общем-то я знаю в какой момент, вылетает это сообщение и для борьбы с ним, просто сделаю обычное условие
 
Код:
if та-та-та then showmessage
и разберусь с ним раз и на всегда!
10
15 мая 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: yura-007
Не нужно с меня смеяться, я пока ещё только учусь!


Если честно, учиться у тебя пока плохо получается. Сказано ведь, что ошибка наведённая скорее всего. Надо найти причину, а не ставить заплаты.

12K
15 мая 2007 года
yura-007
45 / / 03.04.2007
Цитата: Freeman
Если честно, учиться у тебя пока плохо получается. Сказано ведь, что ошибка наведённая скорее всего. Надо найти причину, а не ставить заплаты.


Причину я знаю. Я начинаю редактирвать запись:

 
Код:
Table1.Append;

Далее так может получится, что я опять пытаюсь редактировать этуже запись, но уже
 
Код:
Table2.Append;

др. тейблом. Это связанно с особенностью моей программы, нечего страшного в этой ошибке нет, её нужно было перехватить и выдать сообщение, что запись уже редактируется. В этоге я решил эту проблему обычным условием, т.к. перехватить не удалось.:(
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог