Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
Всем привет! Прошу прощения, если я повторяюсь. Вроде как, моя проблема достаточно распространенная. Но я обыскал весь форму и ничего не нашел. Плохо искал наверно =) Ситуация простая: Нужно заменить сообщение сервера типа: 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. Почему не работает мой триггер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 07:12 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
>Плохо искал наверно Умгу, было уже не раз Можно поменять сообщения в Sysmessage (если ничего не путаю) >2. Почему не работает мой триггер? Дык ить, DRI наверное не отключил, вот до триггера дело и не доходит В MS SQL Ссылочная целостность может поддерживатья либо триггерами, либо DRI, а одновременно низя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 07:19 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
А я вот попробовал 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. ЗЫ. А вообще мне название темы понравилось . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 07:28 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
>А вообще мне название темы понравилось А я как то сразу не обратил внимания, а сейчас проникся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 07:42 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
2 Genady: >Дык ить, DRI наверное не отключил, вот до триггера дело и не доходит В MS SQL Ссылочная целостность может поддерживатья либо триггерами, либо DRI, а одновременно низя. Ну это Вы совсем зря. Триггеры Instead отрабатывают до DRI. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 08:02 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
2 AnKa надо в конфигурации разрешить изменение системных таблиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 08:07 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
Грёбаный форум. Сообщение пофигачил. Заново набирать усё приходится. 1. Вариант с триггером. В BOL написано, что сначала запускается проверка Referential Integrity, и если выходит ошибка, то триггер и не запускается. Тут всё ясно. Отключить RI - это 1) убрать все связи? или 2) есть специальная опция? Если 1), то чем в остальных отношениях чревата замена связей на триггеры? 2. Вариант с заменой системных сообщений. Не подходит: 1) Переустановка сервера требует пере-изменения этих сообщений. 2) В любом случае в этих системных сообщениях выдаются СИСТЕМНЫЕ имена таблиц, а юзеру надо видеть нормальные русские названия инфо-объектов (Заказчик, Договор). Просьба дать ссылки на обсуждения данной проблемы. P. S. Кстати чё вы так прётесь над сабжем? Не надо понимать всё так буквально =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 08:09 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
2 Павел: Забыл упомянуть. У нас MS SQL 7.0, там, насколько я знаю, таких примочек нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 08:11 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
2 ivans Может лучше не городить огород, а прописать сообщения об ошибках в бизнес объектах? >Отключить RI - это 1) убрать все связи? или 2) есть специальная опция? Ну да, убрать все связи, а целостность поддерживать триггерами. >Кстати чё вы так прётесь над сабжем? Не надо понимать всё так буквально Да ладно, не обижайтесь просто прикольно получилось, из серии "нарочно не придумаешь" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 08:19 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 08:21 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
2 Genady: В бизнес-объектах? Имеется в виду на клиенте? И всё-таки, где эта проблема уже обсуждалась? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 09:11 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
>В бизнес-объектах? Имеется в виду на клиенте? Ну не обязательно на клиенте, зависит от того какая у Вашего приложения архитектура. Я во всяком случае имел в виду сервер приложений, т.е. как минимум 3-х уровневую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 10:17 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
У меня 2-х уровневая структура. Но каким образом вы сможете прописать сообщение об ошибке, которая генерится на сервере, на клиенте. Это значит что на клиент нужно так же перенести все проверки на целостность данных, которые делает сервер. Допустим идёт удаление из таблицы "клиенты", которая связана с таблицами "договора", "контактные лица", "оплаты" и т. д. Вы же не будет на клиенте прописывать проверку для кажой из таблиц, на возможность удаления. Это не рационально. Как в данном случае определить с какой из таблиц произошло нарушение ссылки? Сервер возвращает запись типа, как я уже писал в начале: DELETE statement conflicted with COLUMN REFERENCE constraint 'FK_ContactPersons_Clients'. The conflict occurred in database 'DIZ', table 'ContactPersons', column 'ClientID' Получается, только триггерный вариант пока самый верный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 12:35 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
>У меня 2-х уровневая структура. В этом случае тяжелей конечно. Если Ваш проект только начинается переходите на n-уровневую не пожалеете >Сервер возвращает запись типа, как я уже писал в начале: DELETE statement conflicted with COLUMN REFERENCE constraint 'FK_ContactPersons_Clients'. The conflict occurred in database 'DIZ', table 'ContactPersons', column 'ClientID' Ну дык, а объект Error в ADO просто так что ли присутствует? Думаю обработать пришедшую с сервера ошибку не так уж сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 12:47 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
Если не лень, то дополните в соседнем форуме по аналогичной проблеме: http://www.sql.ru/cgi-bin/UltraBoard/UltraBoard.pl?Action=ShowPost&Board=access&Post=12 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 14:46 |
|
||
|
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
|
|||
|---|---|---|---|
|
#18+
Я бы использовал сохраненную процедуру для удаления клиента. Ее легче модернизировать чем клиентско ПО и с тригерами путаться не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 19:13 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32012509&tid=1825791]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 390ms |

| 0 / 0 |
