powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
17 сообщений из 17, страница 1 из 1
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012480
ivans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Прошу прощения, если я повторяюсь. Вроде как, моя проблема достаточно
распространенная. Но я обыскал весь форму и ничего не нашел. Плохо искал наверно =)

Ситуация простая:
Нужно заменить сообщение сервера типа:
DELETE statement conflicted with COLUMN REFERENCE constraint 'FK_ContactPersons_Clients'. The conflict occurred in database 'DIZ', table 'ContactPersons', column 'ClientID'.
на понятное пользователю: Удаление записи из таблицы "Клиенты" невозможно, так как
есть связанные записи в таблице "Контактные лица".

Попробовал написать триггер следующего содержания (вернее создал триггер с помощью ErWin):
CREATE trigger tD_Clients on Clients for DELETE as
begin
declare @errno int,
@errmsg varchar(255)

if exists (
select * from deleted,ContactPersons
where
ContactPersons.ClientID = deleted.ClientID
)
begin
select @errno = 30001,
@errmsg = 'Невозможно удалить <Заказчика>, так как существуют связанные записи о <Контактных лицах>.'
goto error
end

return
error:
raiserror @errno @errmsg
rollback transaction
end

Однако, при попытке удалить запись возникает старое серверное сообщение.
Хотелось бы получить ответ на следующие вопросы:
1. Какие есть другие (нетриггерные) варианты решения этой проблемы?
2. Почему не работает мой триггер?
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012481
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Плохо искал наверно
Умгу, было уже не раз
Можно поменять сообщения в Sysmessage (если ничего не путаю)

>2. Почему не работает мой триггер?
Дык ить, DRI наверное не отключил, вот до триггера дело и не доходит
В MS SQL Ссылочная целостность может поддерживатья либо триггерами, либо DRI, а одновременно низя.
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012484
AnKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А я вот попробовал

update master.dbo.sysmessages
SET description='1 '+description
where error=1

И получил ругательство:
Server: Msg 259, Level 16, State 2, Line 1
Ad hoc updates to system catalogs are not enabled. The system administrator must reconfigure SQL Server to allow this.

ЗЫ. А вообще мне название темы понравилось .
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012486
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А вообще мне название темы понравилось
А я как то сразу не обратил внимания, а сейчас проникся
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012488
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Genady:
>Дык ить, DRI наверное не отключил, вот до триггера дело и не доходит В MS SQL Ссылочная целостность может поддерживатья либо триггерами, либо DRI, а одновременно низя.

Ну это Вы совсем зря. Триггеры Instead отрабатывают до DRI.
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012490
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 AnKa
надо в конфигурации разрешить изменение системных таблиц
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012491
ivans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Грёбаный форум. Сообщение пофигачил. Заново набирать усё приходится.

1. Вариант с триггером.
В BOL написано, что сначала запускается проверка Referential Integrity, и если выходит
ошибка, то триггер и не запускается. Тут всё ясно.
Отключить RI - это 1) убрать все связи? или 2) есть специальная опция?
Если 1), то чем в остальных отношениях чревата замена связей на триггеры?

2. Вариант с заменой системных сообщений.
Не подходит:
1) Переустановка сервера требует пере-изменения этих сообщений.
2) В любом случае в этих системных сообщениях выдаются СИСТЕМНЫЕ имена таблиц, а юзеру
надо видеть нормальные русские названия инфо-объектов (Заказчик, Договор).

Просьба дать ссылки на обсуждения данной проблемы.

P. S. Кстати чё вы так прётесь над сабжем? Не надо понимать всё так буквально =)
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012493
ivans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Павел:
Забыл упомянуть. У нас MS SQL 7.0, там, насколько я знаю, таких примочек нет.
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012494
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ivans
Может лучше не городить огород, а прописать сообщения об ошибках в бизнес объектах?
>Отключить RI - это 1) убрать все связи? или 2) есть специальная опция?
Ну да, убрать все связи, а целостность поддерживать триггерами.

>Кстати чё вы так прётесь над сабжем? Не надо понимать всё так буквально
Да ладно, не обижайтесь
просто прикольно получилось, из серии "нарочно не придумаешь"
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012495
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Павел
Ну забыл указать что это для версий до семерки включительно. Но народ и так все понял.
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012503
ivans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Genady:
В бизнес-объектах? Имеется в виду на клиенте?

И всё-таки, где эта проблема уже обсуждалась?
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012509
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>В бизнес-объектах? Имеется в виду на клиенте?
Ну не обязательно на клиенте, зависит от того какая у Вашего приложения архитектура. Я во всяком случае имел в виду сервер приложений, т.е. как минимум 3-х уровневую.
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012539
ivans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня 2-х уровневая структура.
Но каким образом вы сможете прописать сообщение об ошибке, которая генерится на
сервере, на клиенте. Это значит что на клиент нужно так же перенести все проверки
на целостность данных, которые делает сервер.

Допустим идёт удаление из таблицы "клиенты", которая связана с таблицами "договора",
"контактные лица", "оплаты" и т. д.
Вы же не будет на клиенте прописывать проверку для кажой из таблиц, на возможность удаления. Это не рационально.
Как в данном случае определить с какой из таблиц произошло нарушение ссылки?
Сервер возвращает запись типа, как я уже писал в начале:
DELETE statement conflicted with COLUMN REFERENCE constraint 'FK_ContactPersons_Clients'. The conflict occurred in database 'DIZ', table 'ContactPersons', column 'ClientID'

Получается, только триггерный вариант пока самый верный.
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012543
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>У меня 2-х уровневая структура.
В этом случае тяжелей конечно. Если Ваш проект только начинается переходите на n-уровневую не пожалеете

>Сервер возвращает запись типа, как я уже писал в начале:
DELETE statement conflicted with COLUMN REFERENCE constraint 'FK_ContactPersons_Clients'. The conflict occurred in database 'DIZ', table 'ContactPersons', column 'ClientID'

Ну дык, а объект Error в ADO просто так что ли присутствует?
Думаю обработать пришедшую с сервера ошибку не так уж сложно.
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012557
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не лень, то дополните в соседнем форуме по аналогичной проблеме:
http://www.sql.ru/cgi-bin/UltraBoard/UltraBoard.pl?Action=ShowPost&Board=access&Post=12
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012567
V. Motchulsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я бы использовал сохраненную процедуру для удаления клиента. Ее легче модернизировать чем клиентско ПО и с тригерами путаться не надо.
...
Рейтинг: 0 / 0
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
    #32012571
Фотография Deosfen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня было точно такая проблема, пришлось удалить RI, и целостность реализовывать триггерами, и там писать понятные сообщения для клиента.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]