Страница 1 из 1
Сообщение о дубликате записи (IB + Delphi)
Добавлено: 02 янв 2005, 19:32
Некто
Создал ексцепшн, для вывода сообщения о дублировании записи (sqlcode -803):
create exception msg_dbl 'Такое значение в справочнике уже существует, введите др. значение';
вот теперь мучаюсь с тем, как и куда этот ексцепшн прицепить, к какому триггеру или ХП, может есть у кого пример? или объясните как делать
заранее благодарен
Добавлено: 03 янв 2005, 12:24
Лысый
Пример с ХП:
Код: Выделить всё
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
Добавлено: 03 янв 2005, 16:36
kdv
все это не нужно, если у таблицы есть ПК и запись вставляется обычным insert - сервер все сам проконтролируется и выматерится сразу при попытке вставки дубликата.
Добавлено: 04 янв 2005, 08:31
Лысый
Еще можно создать UNIQUE индекс...
Добавлено: 05 янв 2005, 02:37
Некто
kdv писал(а):все это не нужно, если у таблицы есть ПК и запись вставляется обычным insert - сервер все сам проконтролируется и выматерится сразу при попытке вставки дубликата.
надо чтобы по-русски матерился
Добавлено: 05 янв 2005, 08:32
Лысый
Некто писал(а):kdv писал(а):все это не нужно, если у таблицы есть ПК и запись вставляется обычным insert - сервер все сам проконтролируется и выматерится сразу при попытке вставки дубликата.
надо чтобы по-русски матерился
Что мешает обрабатывать на клиенте?
Добавлено: 05 янв 2005, 15:36
Некто
Тогда какой смысл в клиет-серверной технологии?
Просто возможно что писать клиенты придётся разным людям и даж на разных ЯП.
Добавлено: 05 янв 2005, 15:49
Некто
А вообще можно это не через ХП, а через триггер before insert организовать?
Добавлено: 06 янв 2005, 09:35
Лысый
Я в табличке храню коды ошибок, констрайнты (именованные) и текст сообщения. А клиентом ловлю исключения, анализирую сообщение и вывожу нужный текст ошибки...
Добавлено: 06 янв 2005, 10:57
kdv
обработка ошибок и client-server никак не связаны. Клиентское приложение само обязано обрабатывать ошибки, чтобы быть 100% неубиваемым и понятным для клиента. Сделайте 1 модуль сообщений об ошибках, или действительно храните их в таблице в БД, и так далее. вариантов масса, а перевод сообщений firebird/interbase.msg - это в общем муть, как и усложнение кода на клиенте и сервере только для того, чтобы выдать сообщение о нарушении ПК клиенту на русском языке.
Добавлено: 14 янв 2005, 09:58
McArty
Прочитаешь такую правильную мысль утром и жить хочеться (точно-точно)
А вообще в таком случае, можно прочитать про M-tier технологии. Тогда пусть клиентскую часть пишет кто-хочет и на чем хочет. Или в крайнем случае написать Com-объект, который будет "русифицировать" сообщения от сервака.