Обработка исключений
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Обработка исключений
Есть функция _TRY которой можно ловить исключения.
Есть интерфейс - браузер по таблице.
При нажатии ф7 вызывается окно для редактировния записи этой таблицы. Проставляются значения по умолчанию.
При попытке вставить запись cmInsertRecord вылетает ошибка о дублировании. Обрабатываем исключение.
Как сделать так что бы программа осталась в этом виндове и уже введённые значения не потерялись?
Т.е. что бы она не вылетала в браузер?
Есть интерфейс - браузер по таблице.
При нажатии ф7 вызывается окно для редактировния записи этой таблицы. Проставляются значения по умолчанию.
При попытке вставить запись cmInsertRecord вылетает ошибка о дублировании. Обрабатываем исключение.
Как сделать так что бы программа осталась в этом виндове и уже введённые значения не потерялись?
Т.е. что бы она не вылетала в браузер?
Покажите, как связаны _try и cmInsertRecord?
Зачем встала нужда обрабатывать исключение?
Какие там потенциальные проблемы у Вас могут возникать кроме дублирования?
Чем не устраивает просто
if (insert current Table1 <> 0)
...// обработка ситуации
Вы слишком долго программировали на другом языке, наверное, а Галактика не балует всякими best practice...
Зачем встала нужда обрабатывать исключение?
Какие там потенциальные проблемы у Вас могут возникать кроме дублирования?
Чем не устраивает просто
if (insert current Table1 <> 0)
...// обработка ситуации
Вы слишком долго программировали на другом языке, наверное, а Галактика не балует всякими best practice...
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Window wEditCatalog 'Редактирование справочника';
doAccept не стоит.
У самого интерфейса тоже
У браузера стоит Browse catals (,, sci1478EnEsc);
Пытаюсь при инсёрте ставить флажок в тру.
А cmClose по-этому флажку делать стоп.
Всё равно не получается. Окно закрывается и я оказываюсь в браузере с потерей всех введённых ранее в окне полей.
Может вы имели в виду другой способ "предотвращеня закрытию window"?
doAccept не стоит.
У самого интерфейса тоже
У браузера стоит Browse catals (,, sci1478EnEsc);
Пытаюсь при инсёрте ставить флажок в тру.
А cmClose по-этому флажку делать стоп.
Всё равно не получается. Окно закрывается и я оказываюсь в браузере с потерей всех введённых ранее в окне полей.
Может вы имели в виду другой способ "предотвращеня закрытию window"?
Не, при инсерте поздно флажок ставить. cmInsertRecord происходит когда уходим на другую запись, а закрытие окна раньше происходит.Алексей писал(а): Пытаюсь при инсёрте ставить флажок в тру.
А cmClose по-этому флажку делать стоп.
можно в самом cmInsertRecord снова вызывать окно
if (insert current table1 <> 0)
runwindow...
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Можно, но запись, что была в буфере перед вставкой в таблицу уже потеряна, и если там было много полей и много чего написано, придётся всё писать заново, что не есть хорошо, хотелось бы просто подправить код и заново попытатся вставить запись в таблицу.
события
cmInsertRecord
cmCheckRecord
происходят после закрытия окна
а вот checkfield во время ухода с поля и вот в этот делаю проверку с введённым полем в таблицу на её синоним и если нахожу такую запись то командой abort остаюсь в том поле.
Вроде бы проблема решилась
Да, как то всё сложно с событиями...
события
cmInsertRecord
cmCheckRecord
происходят после закрытия окна
а вот checkfield во время ухода с поля и вот в этот делаю проверку с введённым полем в таблицу на её синоним и если нахожу такую запись то командой abort остаюсь в том поле.
Вроде бы проблема решилась
Да, как то всё сложно с событиями...
-
- На пенсии
- Сообщения: 797
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г. Тюмень
- Контактная информация:
в событии проверку и в ней в нужном случае.
тогда цепочка последующих событий не будет выполняться
Код: Выделить всё
abort
тогда цепочка последующих событий не будет выполняться
Жду выхода Вселенная 2.12!
Re: Обработка исключений
Пытаюсь разобраться, как обрабатывать исключения.
Почему-то после сообщения message(mat) всё равно появляется предупреждение о дублированном значении уникального ключа. Как можно его подавить?
Код: Выделить всё
_try
{
mc_view.insert mc_pos set
mc_pos.fkom:=true,
mc_pos.fkol:=zamkol,
mc_pos.fnrec:=mcpos_view;
}
_except
on ExDbDuplicateKey:
{
message(mat);
}
Re: Обработка исключений
Код: Выделить всё
_try
{
mc_view.insert mc_pos set
mc_pos.nrec := 0,
mc_pos.fkom:=true,
mc_pos.fkol:=zamkol,
mc_pos.fnrec:=mcpos_view;
}
_except
on ExDbDuplicateKey:
{
message(mat);
}
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
Re: Обработка исключений
У меня такого поля нет. Уникальный индекс у fnrec, и оно не автоинкрементно.n0where писал(а): mc_pos.nrec := 0