Страница 2 из 2

Re: Обработка исключений

Добавлено: 07 мар 2012, 16:15
RAJAH
Да вы сговорились! Нету у меня такого поля!

Код: Выделить всё

table struct local mc_pos
  (
    fnrec: comp,
    fkol: double,
    fkom: boolean
  )
with index
  (
    inrec=fnrec(unique)
  );
fnrec - это нреки матценностей, и я хочу, чтобы одна МЦ попала в таблицу только один раз.

Re: Обработка исключений

Добавлено: 07 мар 2012, 16:52
m0p3e
В таких ситуациях стараюсь предварительно проверять наличие записи, т.е.

Код: Выделить всё

If GetFirst FastFirstRow mc_pos Where ((mcpos_view == mc_pos.fnrec))<>tsOk
 ......
Если интересует именно использование обработки исключений, то можно попробовать переписать иначе:

Код: Выделить всё

  ClearBuffer(#mc_pos);
  mc_pos.fkom:=true;
  mc_pos.fkol:=zamkol;
  mc_pos.fnrec:=mcpos_view;
_try
  {
   insert current mc_pos;
  }
_except on ExDbDuplicateKey:
  { 
    message(mat);
  }

Re: Обработка исключений

Добавлено: 13 апр 2012, 11:08
RAJAH
m0p3e писал(а):В таких ситуациях стараюсь предварительно проверять наличие записи, т.е.

Код: Выделить всё

If GetFirst FastFirstRow mc_pos Where ((mcpos_view == mc_pos.fnrec))<>tsOK
......
Этот способ, конечно, лучше, но
m0p3e писал(а):интересует именно использование обработки исключений
К сожалению, с ним не получается: ошибка дублирования ключа так и не подавляется.

Re: Обработка исключений

Добавлено: 13 апр 2012, 13:08
m0p3e
Пример выдран из реально работающих исходников. Работать должен. Видимо причина в тех кусках кода, которые мы не видим. :)