![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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