Страница 1 из 2
Обработка исключений
Добавлено: 15 ноя 2006, 10:42
Алексей
Есть функция _TRY которой можно ловить исключения.
Есть интерфейс - браузер по таблице.
При нажатии ф7 вызывается окно для редактировния записи этой таблицы. Проставляются значения по умолчанию.
При попытке вставить запись cmInsertRecord вылетает ошибка о дублировании. Обрабатываем исключение.
Как сделать так что бы программа осталась в этом виндове и уже введённые значения не потерялись?
Т.е. что бы она не вылетала в браузер?
Добавлено: 15 ноя 2006, 13:16
coolibin
Покажите, как связаны _try и cmInsertRecord?
Зачем встала нужда обрабатывать исключение?
Какие там потенциальные проблемы у Вас могут возникать кроме дублирования?
Чем не устраивает просто
if (insert current Table1 <> 0)
...// обработка ситуации
Вы слишком долго программировали на другом языке, наверное, а Галактика не балует всякими best practice...
Добавлено: 15 ноя 2006, 13:21
coolibin
А предварительную проверку (чтобы не нарываться на такие "исключения") делать лучше в cmCheckRecord
Добавлено: 15 ноя 2006, 13:26
Алексей
1. Да пытаюсь при дублировании индекса, остатся в том же window а не вываливаться обратно в браузер. А всёж вываливается.
2. cmCheckRecord Т.е. делать гетфёртс по синониму с этим же кодом и смотреть если есть запись каким событием остатся в window?
Добавлено: 15 ноя 2006, 13:58
coolibin
Нет, cmCheckRecord, не поможет остаться в окне.
Нужно понять - когда мы из окна обратно в браузер возвращаемся?
Информация к размышлению
Закрытию окна можно противостоять в cmClose окна
Не стоит ли у окна атрибут doAccept
Добавлено: 16 ноя 2006, 05:59
Алексей
Window wEditCatalog 'Редактирование справочника';
doAccept не стоит.
У самого интерфейса тоже
У браузера стоит Browse catals (,, sci1478EnEsc);
Пытаюсь при инсёрте ставить флажок в тру.
А cmClose по-этому флажку делать стоп.
Всё равно не получается. Окно закрывается и я оказываюсь в браузере с потерей всех введённых ранее в окне полей.
Может вы имели в виду другой способ "предотвращеня закрытию window"?
Добавлено: 16 ноя 2006, 10:50
coolibin
Алексей писал(а):
Пытаюсь при инсёрте ставить флажок в тру.
А cmClose по-этому флажку делать стоп.
Не, при инсерте поздно флажок ставить. cmInsertRecord происходит когда уходим на другую запись, а закрытие окна раньше происходит.
можно в самом cmInsertRecord снова вызывать окно
if (insert current table1 <> 0)
runwindow...
Добавлено: 16 ноя 2006, 11:35
Алексей
Можно, но запись, что была в буфере перед вставкой в таблицу уже потеряна, и если там было много полей и много чего написано, придётся всё писать заново, что не есть хорошо, хотелось бы просто подправить код и заново попытатся вставить запись в таблицу.
события
cmInsertRecord
cmCheckRecord
происходят после закрытия окна
а вот checkfield во время ухода с поля и вот в этот делаю проверку с введённым полем в таблицу на её синоним и если нахожу такую запись то командой abort остаюсь в том поле.
Вроде бы проблема решилась
Да, как то всё сложно с событиями...
Добавлено: 18 ноя 2006, 12:37
Max_Fin
в событии проверку и в ней
в нужном случае.
тогда цепочка последующих событий не будет выполняться
Добавлено: 20 ноя 2006, 09:47
Goblin
coolibin писал(а):... best practice...
Аксаптоид Вы наш
Добавлено: 20 ноя 2006, 12:20
coolibin
Goblin писал(а):
Аксаптоид Вы наш
Тяжелый Вы наш патологический...
Re: Обработка исключений
Добавлено: 07 мар 2012, 09:32
RAJAH
Пытаюсь разобраться, как обрабатывать исключения.
Код: Выделить всё
_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);
}
Почему-то после сообщения
message(mat) всё равно появляется предупреждение о дублированном значении уникального ключа. Как можно его подавить?
Re: Обработка исключений
Добавлено: 07 мар 2012, 13:03
n0where
Код: Выделить всё
_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: Обработка исключений
Добавлено: 07 мар 2012, 13:58
RAJAH
n0where писал(а):
mc_pos.nrec := 0
У меня такого поля нет. Уникальный индекс у fnrec, и оно не автоинкрементно.
Re: Обработка исключений
Добавлено: 07 мар 2012, 16:10
Masygreen