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

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

Добавлено: 19 апр 2006, 17:37
MIE
Добрый вечер
Подскажите пожалуйсто как отловить ошибку: "Cannot insert duplicate key row in object 'Table_Name' with unique index 'Index_Name'", чтобы представлять ее пользователю на русском языке.

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

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

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

Добавлено: 24 апр 2006, 12:53
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.

Добавлено: 04 май 2006, 10:01
MIE
Благодарю вас, уважаемые коллеги, но к счастью нашла решение сама.

Добавлено: 04 май 2006, 10:34
coolibin
MIE писал(а):Благодарю вас, уважаемые коллеги, но к счастью нашла решение сама.
А поделиться?

Добавлено: 04 май 2006, 16:07
MIE
На BeforePost запускаю Query, который селекит такую запись, и если нашел то ShowMessage('ля ля ля') и abort. Возможно не рационально, но меня пока устраивает.

Добавлено: 04 май 2006, 16:23
WiRuc
MIE писал(а):На BeforePost запускаю Query, который селекит такую запись, и если нашел то ShowMessage('ля ля ля') и abort. Возможно не рационально, но меня пока устраивает.
Я балдею :D
Нужно было сразу говорить, что работаете с ADO.

Добавлено: 04 май 2006, 16:27
MIE
Ну извините уж.

Добавлено: 04 май 2006, 16:50
Maverick
:D мдя...