Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) connection is busy with results for another hstmt (число прочтений - 12541 )
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
connection is busy with results for another hstmt
17. Августа 2006 :: 11:50
Печать  
Из-за чего вылазит?

Пытаюсь выполнить ТП.ОбновитьСтроки у простейшего запроса...
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #1 - 17. Августа 2006 :: 12:04
Печать  
Это сообщение от драйвера ODBC. Попросту говоря,
Цитата:
Default result sets do not support multiple active statements on the same connection. After an SQL statement is executed on a connection, the server does not accept commands (except a request to cancel the rest of the result set) from the client on that connection until all the rows in the result set have been processed.

С ТП не работал, по-этому workarround предолжить не могу. Печаль
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #2 - 17. Августа 2006 :: 12:04
Печать  
видимо рекордсет какой-то не закрыт
  

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #3 - 17. Августа 2006 :: 12:09
Печать  
trad писал(а) 17. Августа 2006 :: 12:04:
видимо рекордсет какой-то не закрыт

Это поставщик данных MSSQL для ТП...

Источник = СоздатьОбъект("ODBCDataProvider.MSSQL");
База = СоздатьОбъект("ODBCDatabase");
Источник.БазаДанных = База;


тут незакрытых рекордсетов быть немогет...
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #4 - 17. Августа 2006 :: 12:13
Печать  
Здесь используется подключение 1С. На котором вполне может быть открытый рекордсет.Изменено:
Или второй рекордсет открывается позже..
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #5 - 17. Августа 2006 :: 12:14
Печать  
Да, в другом классе, есть открытый рекордсет...

Получается что я не имею возможность использовать поставщика MSSQL если какая-то форма работает с рекордсетом?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #6 - 17. Августа 2006 :: 12:16
Печать  
Arta писал(а) 17. Августа 2006 :: 12:14:
Да, в другом классе, есть открытый рекордсет...

Получается что я не имею возможность использовать поставщика MSSQL если какая-то форма работает с рекордсетом?

Можно создать ещё одно подключение (если 1С запущен не монопольно).
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #7 - 17. Августа 2006 :: 12:28
Печать  
Брр...
Опишу проблему.

Есть обработка, несколько вкладок, на каждой вкладке ТП, реализованный в виде класса, где поставщиком является MSSQL.
До недавнего времени все было нормально, сегодня вылез такой косяк, причем этот баг никак не отстреливается... Печаль

При переходе от вкладки к вкладке ТП не уничтожаются, запросы продолжают работать, но при этом дополнительно выбираются данные через
DataBase = СоздатьОбъект("ODBCDatabase");
DataBase.Attach1C();
RecordSet = СоздатьОбъект("ODBCRecordSet");
RecordSet.SetDatabase(DataBase);
RecordSet.ВыполнитьИнструкцию(ТекстЗапроса);
Например для отбора каких либо данных...


Собственно вопрос, в каком месте я наступил на грабли и так делать было не надо?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #8 - 17. Августа 2006 :: 12:57
Печать  
Если поставщик данных не закрывает рекордсет (я этого не знаю), то грабли в строке
DataBase.Attach1C();
а ODBC ругается в строке
RecordSet.ВыполнитьИнструкцию(ТекстЗапроса);

Попробуй вместо Attach1C метод Соединение:

DataBase.Соединение("DRIVER=SQL Server;SERVER=servername;UID=sa;PWD=xxx;DATABASE=dbname;");
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #9 - 17. Августа 2006 :: 13:17
Печать  
Не помогло...

черт побери, впервые так сильно встрял Печаль

А есть возможность со стороны сервера отследить, какой запрос в данный момент он отрабатывает?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #10 - 17. Августа 2006 :: 13:20
Печать  
есть подозрения.
ТаймаутОбновления установлен?
если да то попробуй поставить 0 для проверки
  

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



Сообщений: 108
Местоположение: Donetsk
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #11 - 17. Августа 2006 :: 13:31
Печать  
Arta писал(а) 17. Августа 2006 :: 13:17:
Не помогло...

черт побери, впервые так сильно встрял Печаль

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

Воспользуйся SQL Profiler
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #12 - 17. Августа 2006 :: 13:32
Печать  
Первым делом убрал. Уже сталкивался с такой проблемой, еще на итланде писал, что если запрос громоздкий и тяжелый, то обновление может начаться тогда, когда еще старые результаты не были получены.


В данном случае я использую принудительно ОбновитьСтроки. В первый раз захожу на закладку, создавая ТП, во второй раз просто обновляются строки. И на второй раз вылазит эта ошибка. Подчеркну, что запрос простейший, с одним джойном к номенклатуре. Результат - 5 строк...
Код
Выбрать все
Если ПустоеЗначение(Конт.ТабличноеПолеЗаказы) = 1 Тогда
	Конт.ТабличноеПолеЗаказы = Служебное.СоздатьЭлементУправления(Конт, СоздатьОбъект("ТабличноеПолеЗаказы"), "ТабличноеПолеЗаказы");
	Конт.ТабличноеПолеЗаказы.Инициализация();
	Конт.ТабличноеПолеЗаказы.Вывести(Конт);
КонецЕсли;
Конт.ТабличноеПолеЗаказы.ОбновитьСтроки();
 

  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #13 - 17. Августа 2006 :: 14:26
Печать  
Не, хоть застрелите, а такая ошибка у меня вылазила ТОЛЬКО у ТП с поставщиком MSSQL, c тяжелым запросом, и частым периодом обновления...

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


P.S. А типизация этих пяти строк в запросе может быть причиной? Хотя, блин, у меня раз уже все вывелось, я просто пытаюсь ОбновитьСтроки сделать Печаль
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #14 - 17. Августа 2006 :: 14:33
Печать  
Не успел пожаловаться, как отловил баг.

Итак, у меня был запрос:

Код
Выбрать все
ТекстЗапроса = "
	|SELECT
	|	Номенклатура.Code AS Код,
	|	Спр.ID AS [ID $Справочник.Требования_заказы],
	|	$Спр.Товар AS [Наименование $Справочник.Номенклатура],
	|	$Номенклатура.Артикул AS Артикул,
	|
	|	CASE
	|		WHEN
	|			$Спр.Заказано = :Да
	|		THEN
	|			'Да'
	|		ELSE
	|			'Нет'
	|	END AS [Заказано $Строка],
	|	$Спр.Затребовал AS [Заказал $Справочник.Пользователи],
	|	$Спр.ЗаказаноДок AS [Заказ $Документ.Заказ]
	|FROM
	|	$Справочник.Требования_заказы AS Спр (NOLOCK)
	|JOIN
	|	$Справочник.Номенклатура AS Номенклатура (NOLOCK)
	|ON
	|	Номенклатура.ID = $Спр.Товар
	|WHERE
	|	$Спр.ДокументОснование = :Док AND
	|	Спр.Ismark != 1
	|";

	Источник.УстановитьТекстовыйПараметр("Док", Док.ТекущийДокумент());
	Источник.УстановитьТекстовыйПараметр("Да", Да);
	Источник.УстТекстЗапроса(ТекстЗапроса);
	Источник.УстКлючПорядка("Наименование");
	Источник.УстИдПоле("Наименование");
	Элемент.ПоставщикДанных = Источник;
 



Изменил УстКлючПорядка на
Код
Выбрать все
Источник.УстКлючПорядка("ID"); 


и все заработало.

Я был прав? Из-за типизации?
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #15 - 17. Августа 2006 :: 14:46
Печать  
Цитата:
Я был прав? Из-за типизации?

Думаю что нет, не прав. В скорее всего дело в том, что ключ порядка не уникален.
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #16 - 17. Августа 2006 :: 14:48
Печать  
А зачем упорядочивать по идентификаторам?
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #17 - 17. Августа 2006 :: 14:53
Печать  
Тебя то я и провоцировал вступить в разговор Улыбка


по ID я просто попробовал и ошибка пропала!

P.S. Дело конечно и не в типизации, я уже проверил. Я ее попросту убрал - проблема остается...
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #18 - 17. Августа 2006 :: 14:54
Печать  
DmitrO писал(а) 17. Августа 2006 :: 14:46:
Думаю что нет, не прав. В скорее всего дело в том, что ключ порядка не уникален.



Как это не уникален, если таких полей больше нет...
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #19 - 17. Августа 2006 :: 14:55
Печать  
Цитата:
А зачем упорядочивать по идентификаторам?

это вопрос по этому коду:
Источник.УстКлючПорядка("Наименование");
$Спр.Товар это ведь идентификатор (раз ты его типизируешь  Озадачен)  ты же получишь непонятный человеческому мозгху порядок Озадачен
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #20 - 17. Августа 2006 :: 14:56
Печать  
Согласен, скосячил Улыбка
Но работать то должно?
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #21 - 17. Августа 2006 :: 15:02
Печать  
надо писать так:
...
$Спр.Товар AS [Товар $Справочник.Номенклатура],
$Номенклатура.descr AS [ТоварНаименование],
...

Источник.УстКлючПорядка("ТоварНаименование, ID");

тока надо иметь в виду, что так нет подходящего индекса..
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #22 - 17. Августа 2006 :: 15:05
Печать  
Arta писал(а) 17. Августа 2006 :: 14:54:
DmitrO писал(а) 17. Августа 2006 :: 14:46:
Думаю что нет, не прав. В скорее всего дело в том, что ключ порядка не уникален.



Как это не уникален, если таких полей больше нет...


Значения полей перечисленых в ключе порядка должны быть уникальны для каждой записи, иначе ТП просто не сможет ориентироваться в наборе записей полученных от поставщика, оно не сможет отличить одну запись от другой. При этом могут быть ран тайм ошибки различного рода, от тех которые ты словил, до незаметных утечек памяти..
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #23 - 17. Августа 2006 :: 15:08
Печать  
DmitrO писал(а) 17. Августа 2006 :: 15:02:
надо писать так:
...
$Спр.Товар AS [Товар $Справочник.Номенклатура],
$Номенклатура.descr AS [ТоварНаименование],
...

Источник.УстКлючПорядка("ТоварНаименование, ID");

тока надо иметь в виду, что так нет подходящего индекса..


Да, я в курсе. Это был ляп, обратил внимание, только когда начал разбираться...
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #24 - 17. Августа 2006 :: 15:08
Печать  
PS: Эх, хотел же, оснастить ТП детектором неуникальности ключа порядка.. забил на это.. Печаль
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #25 - 17. Августа 2006 :: 15:10
Печать  
Цитата:
надо писать так:
...
$Спр.Товар AS [Товар $Справочник.Номенклатура],
$Номенклатура.descr AS [ТоварНаименование],
...

Источник.УстКлючПорядка("ТоварНаименование, ID");

поправка:
Номенклатура.descr AS [ТоварНаименование],
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #26 - 17. Августа 2006 :: 15:11
Печать  
DmitrO писал(а) 17. Августа 2006 :: 15:05:
Значения полей перечисленых в ключе порядка должны быть уникальны для каждой записи, иначе ТП просто не сможет ориентироваться в наборе записей полученных от поставщика, оно не сможет отличить одну запись от другой. При этом могут быть ран тайм ошибки различного рода, от тех которые ты словил, до незаметных утечек памяти..



Уникальны для конкретного экземпляра ТП? Так 'Наименование' было уникально...
Если для одновременно открытых разных ТП, то я... в общем в трансе. Это как-то можно избежать?
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #27 - 17. Августа 2006 :: 15:12
Печать  
DmitrO писал(а) 17. Августа 2006 :: 15:08:
PS: Эх, хотел же, оснастить ТП детектором неуникальности ключа порядка.. забил на это.. Печаль



Да, в ТП много чего осталось нереализовано Улыбка
Пожеланий было масса...
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #28 - 17. Августа 2006 :: 15:18
Печать  
Arta писал(а) 17. Августа 2006 :: 15:11:
DmitrO писал(а) 17. Августа 2006 :: 15:05:
Значения полей перечисленых в ключе порядка должны быть уникальны для каждой записи, иначе ТП просто не сможет ориентироваться в наборе записей полученных от поставщика, оно не сможет отличить одну запись от другой. При этом могут быть ран тайм ошибки различного рода, от тех которые ты словил, до незаметных утечек памяти..



Уникальны для конкретного экземпляра ТП? Так 'Наименование' было уникально...
Если для одновременно открытых разных ТП, то я... в общем в трансе. Это как-то можно избежать?


ты меня не понял..
*поставщик данных возвращает записи
*чтобы записи отображались в нужном порядке, объявляется набор полей (ключ порядка)
*для каждой, отдельно взятой записи возвращенной поставщиком данных, комбинация значений этих полей должна быть уникальна в пределах всего набора записей
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #29 - 17. Августа 2006 :: 15:21
Печать  
Все, въехал...

раньше даже в голову не приходило.


Спасибо, что не оставляешь нас Улыбка
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #30 - 17. Августа 2006 :: 15:23
Печать  
А тем кому в голову не приходит, рекомендую читать документацию по-внимательнее. Подмигивание
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: connection is busy with results for another hs
Ответ #31 - 17. Августа 2006 :: 15:27
Печать  
Да, согласен, RTFM. Ткнули мордой лица, пошел читать, посыпаю голову пеплом Улыбка
  
Наверх
 
IP записан
 
Valar
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 30
Зарегистрирован: 04. Сентября 2006
Re: connection is busy with results for another hs
Ответ #32 - 09. Октября 2006 :: 08:43
Печать  
У меня возникла та же проблема. Причем если выполнять запрос через "ВыполнитьИнструкцию", то ошибка есть, если через "Открыть", то нет. Проблема проявилась у клиента. У меня при разработке такой ошибки не возникало. Подскажите из-за чего может вылазить такая ошибка? Из-за незакрытых рекордсетов ИМХО возникнуть не может, т.к. ошибка вылазит при первом же запросе.

ЗЫ: в табло сообщений выводится еще одна ошибка:
Код
Выбрать все
RS.ВыполнитьИнструкцию(....);
.....: Недопустимое значение второго аргумента метода!
 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать