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

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

Перехват ошибки от 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]

Неужели нет способа? :\


Наверх

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