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-27 01:35:00) [1]

Итог понятный. Серебряной пули нет. Надо в части кодов ошибок разбираться по месту.


sniknik   (2011-04-27 00:15:00) [2]

из хелпа ADO


Дмитрий Тимохов   (2011-04-26 23:49:00) [3]

Всех благодарю. Со своей прикладной задачей разобрался.


> sniknik ©   (26.04.11 20:50) [44]

Откуда цитата?


sniknik   (2011-04-26 21:29:00) [4]

> Ну это костыли от Борланд,
ну, а там костыли от Мелкософт... (если конечно у него реально нет ODBC провайдера в связке подключения, но коды его ошибок есть).
кто то значит захотел совместимости, единообразия, "позаботился" о нас... подумал что мы не сможем осилить нового списка ошибок... и... вуаля! транслирование старого и неполного с точки зрения нового есть, а полного списка новых нет ;(.


Anatoly Podgoretsky   (2011-04-26 21:08:00) [5]

> sniknik  (26.04.2011 20:37:43)  [43]

Ну это костыли от Борланд, они бедненькие думадт, что мы не сможем осилить
TAdoDataset


sniknik   (2011-04-26 20:50:00) [6]

SQLState Property
     
Remarks
Use the SQLState property to read the five-character error code that the provider returns when an error occurs during the processing of an SQL statement. For example, when using the Microsoft OLE DB Provider for ODBC with a Microsoft SQL Server database, SQL state error codes originate from ODBC, based either on errors specific to ODBC or on errors that originate from Microsoft SQL Server, and are then mapped to ODBC errors. These error codes are documented in the ANSI SQL standard, but may be implemented differently by different data sources.


sniknik   (2011-04-26 20:37:00) [7]

> Почему тогда выводятся ошибки ODBC, когда я пользуюсь SQLOLEDB из ADODB?
а почему в дельфи есть ADOTable/ADOQuery? хотя к ADO они не имеют вообще никакого отношения, а вот для BDE "родные".
для совместимости, и разных менеджерских "заморочек" (чтобы при "продвижении" продукта был аргумент "да вам ничего даже переделывать не нужно будет! замените одно на другое да и все..." ).

тип/провайдер ошибки идет в NativeError, по сравнивай его с разными.


OW   (2011-04-26 16:48:00) [8]

http://www.sql.ru/articles/mssql/2005/122703ADO.shtml


Дмитрий Тимохов   (2011-04-26 16:37:00) [9]

Почему тогда выводятся ошибки ODBC, когда я пользуюсь SQLOLEDB из ADODB?


Anatoly Podgoretsky   (2011-04-26 16:34:00) [10]

ODBC не имеет никакого отношения к SQLOLEDB


Дмитрий Тимохов   (2011-04-26 16:08:00) [11]

ЕЩЕ ВОПРОС

Задаю тут, т.к. новый вопрос в общем связан с топиком.

Вопрос несколько общий.

ВОПРОС 1.Скажите, пожалуйста, как взаимосвязаны ODBC, OLE DB и АDO?

Поясню:
1. АDO использует в ConnectionString провайдер OLEDB для доступа SQLOLEDB.
2. А ODBC тут каким боком? Он лежит в основе OLE DB? Или OLE DB сам обращается к БД? Я так понимаю, что ODBC самая низкоуровневая библиотека работы с БД, а на ней уже строится все остальное - OLE DB и ADO.

Если я правильно предполагаю, и в основе ADO лежит ODBC, то возникает ВОПРОС 2.Как понять, какая версия ODBC используется в основе ADO?


Дмитрий Тимохов   (2011-04-26 15:40:00) [12]


> Вариант   (26.04.11 15:01) [36]


Спасибо!! Тебе!!!

Вот что я искал! Это ссылка с твоей первой ссылки:

http://msdn.microsoft.com/en-us/library/ms712451%28VS.85%29.aspx

Как раз HYT00 и S1T00 это одно и тоже только для разных версий ODBC


Дмитрий Тимохов   (2011-04-26 15:37:00) [13]


> Вариант   (26.04.11 15:01) [36]
>
>
> > Дмитрий Тимохов   (26.04.11 14:03) [35]
>


Угу, спасибо. Вроде полезно!


Вариант   (2011-04-26 15:01:00) [14]


> Дмитрий Тимохов   (26.04.11 14:03) [35]

http://msdn.microsoft.com/en-us/library/ms716412%28VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/ms714687(v=VS.85).aspx


Дмитрий Тимохов   (2011-04-26 14:03:00) [15]


> Ega23 ©   (26.04.11 13:49) [34]
>
> Да поставь ты уже
> if Pos('timeout expired') <> 0 then Log
> :)


А лучше так:
if Pos(TranslateToEveryLanguageInTheWorld('timeout expired')) <> 0 then Log

)))

Ну я проверяю, все что могу.

Вообще просто такое несоответствие подрывает мою веру в доку.
Вообще, больная эта тема - коды ошибок.

В HTTP вроде еще ничего. А так, стройности нет как-то...


Ega23   (2011-04-26 13:49:00) [16]

Да поставь ты уже
if Pos('timeout expired') <> 0 then Log
:)


Дмитрий Тимохов   (2011-04-26 13:27:00) [17]

Братцы... вопрос был другой. Почему в доке одно, а по факту другое и это другое я не могу найти в списке ошибок.

МНЕ НАДО в моем обработчике ошибок понимать какая ошибка произошла. МНЕ НЕ НАДО выполнять настройку timeout'а, также мне не надо бороться с ним. МНЕ НАДО только то, что я сказал.

Всё)


Ega23   (2011-04-26 11:23:00) [18]


> выполните запрос select * from SomeTable where SomeField
> like '%dfdfssd%'
> если в таблице 10000000 записей, а таймаут ADODB.Command.
> Timout равен 1 сек.
> вызове Execute свалится с сообщением timeout expired.


Дим, у тебя не капитан, случаем, звание? Естественно свалиться, к гадалке не ходи.


OW   (2011-04-26 11:18:00) [19]

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


OW   (2011-04-26 11:12:00) [20]


> Тут вопрос нельзя свой удалить?

нет, а зачем?
мне тоже интересно, например.


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

Наверх

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