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

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

Код ошибки Timeout expired в MS SQL Server. [MSSQL]


Страницы:   1 2 3

Дмитрий Тимохов ©   (2011-04-25 15:16:00) 

Добрый день!

Ситуация такова:
1. Использую базу данных MS SQL Server.
2. Для доступа использую ADODB.
3. Использую провайдер SQLOLEDB

Проблема:
1. Хочу отлавливать момент, когда ADODB.Command завершается с ошибкой "Timeout expired" для целей последующей отладки подобных ситуаций.

Что не получается:
1. Не могу понять, как по ADODB.Error понять, что произошла эта ошибка (кроме как анализировать ADODB.Error.Description - но это же несерьезно).
2. Не могу понять, откуда вообще брать коды ошибок, и что значат на самом деле ADODB.Error.NativeError и ADODB.Error.SqlState.

Что делал:
1. Поймал ошибку в runtime.
    Description: "Timeout expired"
    Native error: "0"
    Source: "Microsoft OLE DB Provider for SQL Server"
    SQLState: "HYT00"

2. Я подумал, что HYT00 это код ошибки из Microsoft OLE DB Provider for SQL Server. Но не нашел такого.

3. Потому я подумал, что это может код ошибки из стандарта SQL. Но там вроде согласно http://msdn.microsoft.com/en-us/library/aa937531%28SQL.80%29.aspxкодом ошибки для Timeout expired  является S1T00

Вопросы:
1. Какая ошибка то должна быть?
2. Правильно я понимаю, что есть:
  а) Ошибки ADODB
  б) Ошибки сервера
  в) Ошибки OLEDB Provider'а
Если да, то то где их всех отлавливать: в NativeError или SQLState?
3. Где взять списки возможных ошибок?


Дмитрий Тимохов   (2011-04-25 17:08:00) [41]


> какой код?

//
// MessageId: DB_E_ABORTLIMITREACHED
//
// MessageText:
//
//  Execution aborted because a resource limit has been reached; no
//  results have been returned
//
 DB_E_ABORTLIMITREACHED               = HResult($80040E31);


OW   (2011-04-25 17:02:00) [42]

try
   
 except
  on E:Exception do
  begin
     EOleException(E).ErrorCode;  // comobj
  end;
 end;

какой код?


Дмитрий Тимохов   (2011-04-25 16:50:00) [43]

Олегыч, ты вопрос то прочти.

Суть вопроса - по факту возвращается один код ошибки, а вроде должен быть другой, или я не понимаю что-то в структуре ошибок кодов ошибок...


Ega23   (2011-04-25 16:28:00) [44]


> Коннект нормальный. Я про выполнение запроса уже с помощью
> ADODB.Command.Execute. Меня интересует этот таймаут


ааа.
тогда см. ADODB.Command.CommandTimeout


Дмитрий Тимохов   (2011-04-25 16:21:00) [45]

Коннект нормальный. Я про выполнение запроса уже с помощью ADODB.Command.Execute. Меня интересует этот таймаут


Ega23   (2011-04-25 16:19:00) [46]


> Олегыч, ну я делал все это. Что нашел, то привел в вопросе.


Значит не так понял вопрос.

ЕМНИП, там две разных ошибки. Одна - собственно сам процесс коннекта. Вторая - длительное выполнение команды.
Возможно это именно та разница.


Дмитрий Тимохов   (2011-04-25 15:55:00) [47]

Олегыч, ну я делал все это. Что нашел, то привел в вопросе.
Почему вроде должен быть код ошибки в SQLState S1T00, а на самом деле HYT00...


Ega23   (2011-04-25 15:51:00) [48]

Самое простое: тестовый проект, коннект к базе, отрубаешь сервер и вызываешь какой-нить запрос.
try
 ADODataSet.Open;
except on E: Exception do
 ShowMessage(E.ClassName);
end;

Вроде бы должен EOleError вернуть, у него код определённый есть. Выщучивай код и ищи в MSDN по нему (как в dec, так и в hex).


Ega23   (2011-04-25 15:48:00) [49]


> 1. Какая ошибка то должна быть?

Походу EOleException


>  в) Ошибки OLEDB Provider'а

http://msdn.microsoft.com/en-us/library/ms190181.aspx


> 3. Где взять списки возможных ошибок?

Сейчас под рукой нет, см. в msdn и bol.
Вообще я когда-то давно что-то подобное ловил, там у класса исключения ErrorCode должен быть.


Страницы:   1 2 3

Наверх

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