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

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

ADOStoredProc [D5, MSSQL]


ShooRoop ©   (2002-11-15 15:20:00) 

Уважаемые мастера, возникла следующая проблема: имеется ADOStoredProc, возвращающий какой-то DataSet, формирование которого происходит достаточно длительное время (~1 минуту) (если проверить его в Query Analyzer), при попытке открыть ADOStoredProc в Делфи выдается ошибка "Время ожидания истекло" и, естественно, никакого датасета я не получаю. Что нужно изменить для получения нормального результата? Благодарю.


BoxTer   (2002-11-19 13:24:00) [1]

>Icehand
вешаешь на SP DataSource и указываешь ее как источник данных для Грида. Потом Делаешь Active=True у SP руками или программно, и все...


Icehand   (2002-11-19 13:13:00) [2]

Народ, поскольку речь зашла о хранимых процедурах, то хочу обратится к вам со своей проблемой. У меня есть например хранимая процедура в Оракле, например Select * from a.
Как мне передать результат в DBGrid? Я использую ADOStoredProc.


sniknik   (2002-11-18 15:25:00) [3]

Самое первое и есть верное. D6 + апдейты ADO. Или попробуй на 5 апдейты. (хотя вроде говорили не помогает в 5х)

> Кстати, у TADOQuery я не нашел праперти CommandTimeout.
и тем не менее он там есть по крайней мере в 6 дельфях.


ShooRoop   (2002-11-18 14:59:00) [4]

Увы, ничего не помогает. Проходит ~30 секунд и опять ошибка "Время ожидания истекло". Кстати, у TADOQuery я не нашел праперти CommandTimeout. Может, у кого-нибудь есть еще какие-то соображения, буду очень признателен.


asmith   (2002-11-18 12:37:00) [5]

Не TADOQuery.ExecSQL, а TADOQuery.Open, поскольку возвращается курсор.


ShooRoop   (2002-11-18 11:23:00) [6]

2 BlackTiger:
Можно чуть поподробнее, каким образом я могу через TADOQuery вызвать хранимую процедуру. Если я правильно понимаю, я прописываю в TADOQuery.SQL "EXEC sp_lalala()" а потом делаю TADOQuery.ExecSQL? Или как-то иначе?


BlackTiger   (2002-11-15 23:04:00) [7]

Эти несчастные таймуаты прописывать нужно в нескольких местах для надежности.
1. в самом ConnectionString"e (там их два - General и еще какой-то)
2. в ADOConnection (ConnectionTimeout, CommandTimeout (не уверен, есть ли он, не могу сейчас проверить))
3. в Query/SP (CommandTimeout)

Сам я TADOStoredProc никогда не пользуюсь. Предпочитаю вызывать "EXEC sp_lalala()" через TADOQuery - там установки таймаутов работают, проверено.


sniknik   (2002-11-15 21:55:00) [8]

проверь что у тебя в визуальном обьекте стоит.
(в идеале если dcu заменить то при ложении их на форму уже 60сек ,как у меня, стоять будет)
и проверь как присваивается (трасировкой)
процедура ADODB
procedure TADOConnection.SetCommandTimeout(const Value: Integer);
begin
ConnectionObject.CommandTimeOut := Value;
end;
поставь точку останова здесь, неправильно подключен не даст трассировать.

(предупреждал апдейты проще :о))


ShooRoop   (2002-11-15 16:49:00) [9]

To sniknik:
Абсолютно ничего не изменилось, к сожалению!


sniknik   (2002-11-15 16:03:00) [10]

включи модуль в проект
и поправь
property CommandTimeout: Integer read GetCommandTimeout write SetCommandTimeout default 60;
default -ное значение на желаемое
После надо перекомпилировать проект


ShooRoop   (2002-11-15 15:55:00) [11]

Прекрасно. А каким образом поправить? Или, может, где-то есть исправленный?


sniknik   (2002-11-15 15:53:00) [12]

D6 + апдейты ADO самое простое решение проблемы, в 5 это известный глюк. По моему даже апдейтами не лечится. Но можно модуль ADODB поправить.


ShooRoop   (2002-11-15 15:29:00) [13]

ADOConnection.CommandTimeOut, увы, не помогает, как его ни увеличивай (даже до 10000). Та же ошибка.


Андрей Прокофьев   (2002-11-15 15:22:00) [14]

ADOStoredProc.CommandTimeOut


Наверх

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