как отловить ошибку: "Cannot insert duplicate key row i

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
MIE
Сообщения: 4
Зарегистрирован: 19 апр 2006, 17:20

как отловить ошибку: "Cannot insert duplicate key row i

Сообщение MIE »

Добрый вечер
Подскажите пожалуйсто как отловить ошибку: "Cannot insert duplicate key row in object 'Table_Name' with unique index 'Index_Name'", чтобы представлять ее пользователю на русском языке.
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Сообщение coolibin »

Например:
if(insert current Table_name <> tsOk)
message('Ты че, чудак, одинаковые записи генеришь?!');
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

coolibin писал(а):Например:
if(insert current Table_name <> tsOk)
message('Ты че, чудак, одинаковые записи генеришь?!');
В итоге выдастся и Ваше сообщение и сообщение системное...

Здесь необходимо использовать обработчик исключений (соответственно заглушить стандартое сообщение, обработав стандартное исключение, отвечающее за данное сообщение, выдав собственное).
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Сообщение coolibin »

Maverick писал(а):
coolibin писал(а):Например:
if(insert current Table_name <> tsOk)
message('Ты че, чудак, одинаковые записи генеришь?!');
В итоге выдастся и Ваше сообщение и сообщение системное...

Здесь необходимо использовать обработчик исключений (соответственно заглушить стандартое сообщение, обработав стандартное исключение, отвечающее за данное сообщение, выдав собственное).
Уверен?
Вот тебе пример:

interface test1 'Test1' EscClose;
show at (,,,);

table struct tblTest1
(
Field1 : comp,
Field2 : string[10]
)
with index
(
IND01 = Field1 (unique)
)
;
create view
as select *
from
tblTest1
;
HandleEvent

cmInit:
{
ClearBuffer(#tblTest1);
tblTest1.Field1 := 11;
tblTest1.Field2 := 'First record';
if (insert current tblTest1 <> tsOk)
message('Trouble');
else
message('First record's inserted');

ClearBuffer(#tblTest1);
tblTest1.Field1 := 11;
tblTest1.Field2 := 'Second record';
if (insert current tblTest1 <> tsOk)
message('Trouble');
else
message('Second record's inserted');

_loop tblTest1
message(tblTest1.Field2);

Abort;
}
end;
end.
MIE
Сообщения: 4
Зарегистрирован: 19 апр 2006, 17:20

Сообщение MIE »

Благодарю вас, уважаемые коллеги, но к счастью нашла решение сама.
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Сообщение coolibin »

MIE писал(а):Благодарю вас, уважаемые коллеги, но к счастью нашла решение сама.
А поделиться?
MIE
Сообщения: 4
Зарегистрирован: 19 апр 2006, 17:20

Сообщение MIE »

На BeforePost запускаю Query, который селекит такую запись, и если нашел то ShowMessage('ля ля ля') и abort. Возможно не рационально, но меня пока устраивает.
WiRuc
Местный житель
Сообщения: 414
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж

Сообщение WiRuc »

MIE писал(а):На BeforePost запускаю Query, который селекит такую запись, и если нашел то ShowMessage('ля ля ля') и abort. Возможно не рационально, но меня пока устраивает.
Я балдею :D
Нужно было сразу говорить, что работаете с ADO.
MIE
Сообщения: 4
Зарегистрирован: 19 апр 2006, 17:20

Сообщение MIE »

Ну извините уж.
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

:D мдя...
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Ответить