![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перехват ошибки от MSSQL Express 2005 (dbExpress) [D7, MSSQL]
boristt © (2007-04-07 15:45:00)Ув. господа, подскажите как можно узнать код ошибки полученного от сервера SQL.
Для подкоючения исп. dbExpress.
После выполнения команды SQLConnection.ExecuteDirect(.....) например при вставке в табл. записи и при этом происх. дублировании перв. ключа, тогда появляется сообщ. об ошибке:
SQL State: 01000, SQL Error Code: 3621
SQL State: 23000, SQL Error Code: 2627
SQLConnection.ExecuteDirect возвращает 1, но это не то что надо.
Пока удалось поймать только сообщение-строку (написана выше) через перехват события Application.OnException
И в этой строке уже искать код ошибки (исполльзуя pos и т.п.). Неправильно как-то это.
Какой правильный способ есть? Подскажите лз, если таковой есть конечно.
Jan1 (2007-04-11 09:54:00) [1]
> SELECT @@ERROR
Читал:
Because @@ERROR gets a new value when every Transact-SQL statement completes, process @@ERROR in one of two ways:
Test or use @@ERROR immediately after the Transact-SQL statement.
Save @@ERROR in an integer variable immediately after the Transact-SQL statement completes. The value of the variable can be used later.
sniknik (2007-04-10 20:48:00) [2]> Вывести конечному пользователю сообщение на русском.
как показывает практика "конечный" пользователь не читает сообщений об ошибках вообще..., а те редкие, компьютерно грамотные, что читают, те и на английском не брезгуют... и даже наоборот расстраиваются когда вместо оригинала им суют кривой перевод (я например всегда за оригинал, уж больно много проблем встречал, от аналогичных твоим "благий намерений", и именно ПРОБЛЕМ, которые если бы была нормальная ошибка были бы так мелким недоразумением).
boristt (2007-04-10 20:41:00) [3]Разобрался.
Сделать ещё один запрос к БД
SELECT @@ERROR
Тему можно закрывать.
boristt (2007-04-10 20:32:00) [4]Можно конечно делать проверку перед вставкой данных, но хотел обойтись без этого. Используя только ограничения созданные в базе.
boristt (2007-04-10 20:28:00) [5]Вывести конечному пользователю сообщение на русском. Что мол незя добавлять такую запись, ибо есть уже такая, например.
Т.е. ошибка 2627 - значит что происходит попытка дублирования перв. ключа. вот на основании её и делать обработчик.
Desdechado (2007-04-10 11:39:00) [6]А что ты хочешь на основании этого кода ошибки сделать?
boristt (2007-04-09 19:38:00) [7]Неужели нет способа? :\