Сообщение о дубликате записи (IB + Delphi)
Сообщение о дубликате записи (IB + Delphi)
Создал ексцепшн, для вывода сообщения о дублировании записи (sqlcode -803):
create exception msg_dbl 'Такое значение в справочнике уже существует, введите др. значение';
вот теперь мучаюсь с тем, как и куда этот ексцепшн прицепить, к какому триггеру или ХП, может есть у кого пример? или объясните как делать
заранее благодарен
create exception msg_dbl 'Такое значение в справочнике уже существует, введите др. значение';
вот теперь мучаюсь с тем, как и куда этот ексцепшн прицепить, к какому триггеру или ХП, может есть у кого пример? или объясните как делать
заранее благодарен
Пример с ХП:
Код: Выделить всё
CREATE PROCEDURE PERSON_IU (
ID_PERSON INTEGER,
FIO VARCHAR(90))
RETURNS (
ID_OUT INTEGER)
AS
BEGIN
/* Добавление/изменение Person */
IF (EXISTS(SELECT ID FROM PERSON WHERE (ID = :ID_PERSON))) THEN
BEGIN
IF (EXISTS(SELECT FIO FROM PERSON
WHERE UPPER(FIO) = UPPER(:FIO) AND ID <> :ID_PERSON)) THEN
BEGIN
EXCEPTION MSG_DBL;
EXIT;
END
UPDATE PERSON
SET FIO = :FIO
WHERE ID = :ID_PERSON;
ID_OUT = :ID_PERSON;
END ELSE BEGIN
IF (EXISTS(SELECT FIO FROM PERSON WHERE UPPER(FIO) = UPPER(:FIO))) THEN
BEGIN
EXCEPTION MSG_DBL;
EXIT;
END
ID_OUT = GEN_ID(ID, 1);
INSERT INTO PERSON (ID, FIO) VALUES (:ID_OUT, :FIO);
END
SUSPEND;
END
обработка ошибок и client-server никак не связаны. Клиентское приложение само обязано обрабатывать ошибки, чтобы быть 100% неубиваемым и понятным для клиента. Сделайте 1 модуль сообщений об ошибках, или действительно храните их в таблице в БД, и так далее. вариантов масса, а перевод сообщений firebird/interbase.msg - это в общем муть, как и усложнение кода на клиенте и сервере только для того, чтобы выдать сообщение о нарушении ПК клиенту на русском языке.