Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Время ожидания истекло. Посоветуйте, куда копать. (число прочтений - 7760 )
ЯпонаХата
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Местоположение: Київ
Зарегистрирован: 05. Августа 2009
Пол: Мужской
Время ожидания истекло. Посоветуйте, куда копать.
18. Декабря 2012 :: 15:03
Печать  
Привет. Вот запрос.  
Код
Выбрать все
ПодключитьВнешнююКомпоненту("GameWithFire.ADOUtils");
ADOUtils 	= Новый("AddIn.ADOUtils");
Connection 	= Новый COMОбъект("ADODB.Connection");
Стр		= "DRIVER=SQL Server;UID=sa;DATABASE=Opt;SERVER=192.168.100.10;";
Connection.Open(Стр);
ТекстЗапроса="
|SELECT
|((
|cast(left(Журнал.DATE_TIME_IDDOC, 8) as datetime))) Дата
|, Этаж1.DESCR Этаж1
|, Этаж2.DESCR Этаж2
|, Этаж3.DESCR Этаж3
|, Sum(Обороты.sp7818) Продаж
|FROM ra7815 AS Обороты  (nolock)
|LEFT OUTER JOIN     sc92 AS ТМЦ       With (NOLOCK) ON Обороты.sp7823 = ТМЦ.ID
|LEFT OUTER JOIN     sc92 AS Этаж1     With (NOLOCK) ON ТМЦ.PARENTID   = Этаж1.ID
|LEFT OUTER JOIN     sc92 AS Этаж2     With (NOLOCK) ON Этаж1.PARENTID = Этаж2.ID
|LEFT OUTER JOIN     sc92 AS Этаж3     With (NOLOCK) ON Этаж2.PARENTID = Этаж3.ID
|LEFT OUTER JOIN _1SJOURN AS Журнал    With (NOLOCK) ON Обороты.IDDOC  = Журнал.IDDOC
|WHERE ((cast(left(Журнал.DATE_TIME_IDDOC, 6) + '01' as datetime)) IN ("+СписокПериодов+"))
	|GROUP BY (
	|  cast(left(Журнал.DATE_TIME_IDDOC, 8) as datetime))
	|, Этаж3.DESCR
	|, Этаж2.DESCR
	|, Этаж1.DESCR
	|ORDER BY (cast(left(Журнал.DATE_TIME_IDDOC, 8) as datetime))";
	Recordset = Connection.Execute(ТекстЗапроса);
 



Работает на небольших периодах, А на больших SQL Сервер даёт сообщение

Цитата:
(Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver]Время ожидания истекло


Там реально много данных. Подскажите, где увеличить время ожидания? Или запрос не хорош?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Время ожидания истекло. Посоветуйте, куда копать.
Ответ #1 - 19. Декабря 2012 :: 05:05
Печать  
запрос не хорош.
избавься от такого выражения
Цитата:
((cast(left(Журнал.DATE_TIME_IDDOC, 6) + '01' as datetime)) IN ("+СписокПериодов+"))

в пользу такого
Журнал.DATE_TIME_IDDOC between :ДатаНач1 and :ДатаКон1~ or
Журнал.DATE_TIME_IDDOC between :ДатаНач2 and :ДатаКон2~ or
...
Журнал.DATE_TIME_IDDOC between :ДатаНачN and :ДатаКонN~

либо
Журнал.DATE_TIME_IDDOC > :ДатаНач1 and Журнал.DATE_TIME_IDDOC < :ДатаКон1~
и т.п.
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Время ожидания истекло. Посоветуйте, куда копать.
Ответ #2 - 19. Декабря 2012 :: 05:09
Печать  
Время ожидания изменить через свойство Connection.CommandTimeout
Прочитать про другие свойства и методы можно тут:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms681546(v=vs.85).aspx
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Время ожидания истекло. Посоветуйте, куда копать.
Ответ #3 - 19. Декабря 2012 :: 07:54
Печать  
как-то так
если периодов много
то если они идут интервалом то условие на период
или периоды положить в отдельную таблицу


Код
Выбрать все
ТекстЗапроса="
|SELECT
|((
|cast(left(Журнал.DATE_TIME_IDDOC, 8) as datetime))) Дата
|, Этаж1.DESCR Этаж1
|, Этаж2.DESCR Этаж2
|, Этаж3.DESCR Этаж3
|, Sum(Обороты.sp7818) Продаж
|FROM ra7815 AS Обороты  (nolock)
|INNER  JOIN _1SJOURN AS Журнал    With (NOLOCK) ON Обороты.IDDOC  = Журнал.IDDOC
|LEFT OUTER JOIN     sc92 AS ТМЦ	 With (NOLOCK) ON Обороты.sp7823 = ТМЦ.ID
|LEFT OUTER JOIN     sc92 AS Этаж1     With (NOLOCK) ON ТМЦ.PARENTID   = Этаж1.ID
|LEFT OUTER JOIN     sc92 AS Этаж2     With (NOLOCK) ON Этаж1.PARENTID = Этаж2.ID
|LEFT OUTER JOIN     sc92 AS Этаж3     With (NOLOCK) ON Этаж2.PARENTID = Этаж3.ID
|WHERE   Обороты.PERIOD in ("+СписокПериодов+"))
	|GROUP BY (
	|  cast(left(Журнал.DATE_TIME_IDDOC, 8) as datetime))
	|, Этаж3.DESCR
	|, Этаж2.DESCR
	|, Этаж1.DESCR
	|ORDER BY (cast(left(Журнал.DATE_TIME_IDDOC, 8) as datetime))";
  


« Последняя редакция: 19. Декабря 2012 :: 09:35 - Z1 »  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Время ожидания истекло. Посоветуйте, куда копать.
Ответ #4 - 19. Декабря 2012 :: 08:22
Печать  
А откуда в ra взялось поле period ?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Время ожидания истекло. Посоветуйте, куда копать.
Ответ #5 - 19. Декабря 2012 :: 09:35
Печать  
Eprst писал(а) 19. Декабря 2012 :: 08:22:
А откуда в ra взялось поле period ?

перепутал с rg
да таr не получается
  
Наверх
 
IP записан
 
ЯпонаХата
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Местоположение: Київ
Зарегистрирован: 05. Августа 2009
Пол: Мужской
Re: Время ожидания истекло. Посоветуйте, куда копать.
Ответ #6 - 28. Декабря 2012 :: 10:23
Печать  
trad писал(а) 19. Декабря 2012 :: 05:09:
Время ожидания изменить через свойство Connection.CommandTimeout
Прочитать про другие свойства и методы можно тут:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms681546(v=vs.85).aspx

Спасибо, товарищ  Улыбка поставил CommandTimeout=0 ...пока закипятил чаю - уже посчитало.
Запрос обязательно буду оптимизировать. Спасибо всем
P.S.
периоды подряд не идут. периодов максимум 24 (месяца)

« Последняя редакция: 28. Декабря 2012 :: 13:05 - ЯпонаХата »  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать