Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.23;
Скачать: CL | DM;

Вниз

Обработка сообщений сервера   Найти похожие ветки 

 
xenon ©   (2002-12-04 15:46) [0]

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


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

Для работы с 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) и уточним, было ли это при вставке или удалении.


 
xenon ©   (2002-12-04 16:33) [2]

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


 
asmith   (2002-12-04 18:18) [3]

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


 
xenon ©   (2002-12-05 09:58) [4]

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



Страницы: 1 вся ветка

Текущий архив: 2002.12.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
1-74776
ДмитрийК.
2002-12-11 10:38
2002.12.23
Создание компонентов в runtime и перемещение их по форме


4-75055
_pavel_
2002-11-11 11:09
2002.12.23
Handle


1-74730
Витьок
2002-12-14 10:39
2002.12.23
TTreeView


14-74927
wHammer
2002-11-29 14:10
2002.12.23
Компонент


1-74735
Гость
2002-12-14 15:00
2002.12.23
Запуск