Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.017 c
14-74960
aterm
2002-12-03 11:04
2002.12.23
как отловить вставку из буфера в определенную TMemo?


1-74693
bambina
2002-12-12 14:24
2002.12.23
TSaveDialog


6-74864
Pali
2002-10-16 07:42
2002.12.23
NMHTTP1.Post(...) - Почему это не работает в Delphi?


4-75035
BadBoy.Sergey
2002-11-10 01:02
2002.12.23
Как вызвать окно


1-74663
Alexander Vasjuk
2002-12-10 18:04
2002.12.23
как узнать сколько и какие иконки в файле *.ico ?




   Наверх