Главная страница
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.019 c
14-74979
seacat
2002-12-03 12:40
2002.12.23
inaccessible value во время отладки


7-75017
dma77
2002-10-20 12:56
2002.12.23
Процедуры COM порта (стандартные)


14-74952
Driverrr
2002-12-02 19:58
2002.12.23
Что с моей мышкой!


1-74716
Armageddon
2002-12-10 22:22
2002.12.23
К- ричные числа.


7-75010
Slym
2002-10-16 07:35
2002.12.23
Как узнать координаты иконки в трее?