Н. 3. Елманова. C++Builder 3.0, архитектура "клиент/сервер" и Internet
Рис. 5.23. Диагностическое сообщение, являющееся результатом работы триггера, при некорректной вставке записи в detail-таблицу
Если рассмотреть более внимательно созданный CASE-средством текст триггера, можно обнаружить, что именно это диагностическое сообщение в нем и содержится:
-  Trigger USER2.TI_HOLDINGS
CREATE TRIGGER USER2.TI_HOLDINGS AFTER INSERT
ON USER2.HOLDINGS
FOR EACH ROW
declare numrows INTEGER;
begin
/* ERwin Builtin Sun Sep 14 18:43:47 1997 */ /* CLIENTS R/1 HOLDINGS ON CHILD INSERT RESTRICT */ select count(*) into numrows from CLIENTS where
/* %JoinFKPK(:%New,CLIENTS," = "," and") */ :new.ACCT_NBR = CLIENTS.ACCT_NBR; if (
/* %NotnullFK(:%New," is not null and") */ :new.ACCT_NBR is not null and numrows = 0
) then
raise_application_error(
-20002,
'Cannot INSERT "HOLDINGS" because "CLIENTS" does not
exist. '
); end if;
102
Перенос приложений и унаследованных данных в архитектуру клиент/сервер
--   ERwin  Builtin  Sun  Sep   14   18:43:47  1997
end;
Разумеется, пользователь приложения должен видеть нечто более вразумительное, нежели англоязычное сообщение с именем триггера или ограничения и словами про "integrity constraint" и "parent key not found". Можно сделать это путем перехвата исключения в клиентском приложении, но более предпочтительно делать это на сервере, так как тогда будет исключена необходимость повторения кода в случае, когда с одной и той же базой данных работают несколько приложений. Современные CASE-средства по-зволяют,ато.сделать, и интересующиеся этой проблемой могут найти ее решение в документации по используемому CASE-средству и в документации, прилагаемой к соответствующему серверу баз данных. Кроме того, можно просто создать другой текст триггера, заменив диагностическое сообщение более Понятным пользователю текстом.
Таким образом, при использовании современных средств проектирования баз данных, и в частности CASE-технологии, разработчик имеет возможность возложить на сервер значительную часть проблем, которые ранее были проблемами самих клиентских приложений, что может существенно облегчить их создание.
103