Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработка сообщений сервера [D6, MSSQL, ADO]


xenon ©   (2002-12-04 15:46:00) 

Здравствуйте.
Еcть DBGrid + TADOTable + MSSQL
Когда в гриде в носится значение, противоречащее ограничениям целостности БД, сервер выдает соответствующее сообщение.
Пользователь, соответственно, пугается всего, что написано не по-русски.
Вопрос: каким образом можно перехватить ошибку в клиенте и обработать ее?


xenon   (2002-12-05 09:58:00) [1]

Понял. Спасибо!


asmith   (2002-12-04 18:18:00) [2]

Не обратил внимание на то, что у тебя редактирование через DBGrid, sorry! Все, что можно делать - ловить события OnEditError, OnPostError для TADOTable, но простора для маневра много меньше.


xenon   (2002-12-04 16:33:00) [3]

> лови EOleException
В каком месте его ловить?
UpdatePatch и Post нигде явно не вызываются.


asmith   (2002-12-04 16:14:00) [4]

Для работы с ADO лови EOleException
try
myADOTable.Post();
except
on E : EOleException do
MessageDlg(szMessage, mtError, [mbOK], 0);
end;
Список кодов ошибок, которые тебе вернет E.ErrorCode ищи в модуле OLEDB.PAS. Можно извлечь больше информации об ошибке через myADOTable.Connection.Errors примерно так (привожу только часть except):
except
on E : EOleException do
begin
with Connection.Errors[0] do
case E.ErrorCode of
DB_E_INTEGRITYVIOLATION :
case NativeError of
MSSQL_E_CONSTRAINT_VIOLAT_INS : szMessage := strCannotDeleteRecordMessage;
MSSQL_E_CONSTRAINT_VIOLAT_DEL : szMessage := strUniqueViolationMessage;
end;
DB_E_ERRORSINCOMMAND : szMessage := Description;
else
szMessage := Format(strGeneralDatabaseError, [Description, NativeError]);
end;
MessageDlg(szMessage, mtError, [mbOK], 0);
end;
end;
Здесь коды DB_E_INTEGRITYVIOLATION, DB_E_ERRORSINCOMMAND взяты из OLEDB.PAS, а коды MSSQL_E_CONSTRAINT_VIOLAT_INS, MSSQL_E_CONSTRAINT_VIOLAT_DEL взяты из доки по MSSQL (BOL). Таким образом, ADO может в общем выдать ошибку о нарушениицелостности данных и мы подсунем свою месагу. Но если этого мало - попросим сервер вернуть больше данных (NativeError) и уточним, было ли это при вставке или удалении.


Наверх

Титульная страница Поиск, карта сайта Написать письмо