Страница 1 из 2
					
				Возврат результата работы хранимой процедуры
				Добавлено: 22 Июнь 2017, 16:12
				 alex881
				с55ee, legacy, ms sql
вот такой код
  RestIN   DECIMAL(31,10)
  CODE
  BIND('RestIN',RestIN)
  Filesql{PROP:SQL} = 'DECLARE @RestIN MONEY; EXEC dbo.GetRestInVar ''2017-06-21'',''zzz'', @RestIN = @RestIN OUTPUT;  SELECT @RestIN'
  ...и дальше завяз не пойму, как мне получить результат работы ХП
  в ms studio строка отрабатывает без проблем.
 Подскажите, пожалуйста.
			 
			
					
				Возврат результата работы хранимой процедуры
				Добавлено: 22 Июнь 2017, 16:15
				 Дед Пахом
				я думаю, NEXT(Filesql)
			 
			
					
				Возврат результата работы хранимой процедуры
				Добавлено: 22 Июнь 2017, 16:16
				 alex881
				вот и я так думал! Просто не сказал всю страшную правду - оно ругается
"подключение занято до получения результатов для другого hstmt"
на обычный select типа select * from..... такой ошибки нет
в чем у меня косяк?
			 
			
					
				Возврат результата работы хранимой процедуры
				Добавлено: 22 Июнь 2017, 17:02
				 Admin
				
			 
			
					
				Возврат результата работы хранимой процедуры
				Добавлено: 22 Июнь 2017, 19:00
				 Yufil
				Не зацикливается хранимка?  А то бывает... 
А если сервер MS SQL, надо добавить настройку драйвера /Busyhandling=2  (SQL Communications/Connection do not span threads)
			 
			
					
				Возврат результата работы хранимой процедуры
				Добавлено: 22 Июнь 2017, 19:08
				 alex881
				
Читал эту ветку до написания топика, но, стыжусь сказать, не понял в чем там была проблема и как ее решили.
 
			 
			
					
				Возврат результата работы хранимой процедуры
				Добавлено: 22 Июнь 2017, 19:09
				 alex881
				Yufil писал(а): 22 Июнь 2017, 19:00
Не зацикливается хранимка?  А то бывает... 
А если сервер MS SQL, надо добавить настройку драйвера /Busyhandling=2  (SQL Communications/Connection do not span threads)
 
Запрос проверял в мс студии, там все отлично отрабатывает.Проблема у меня при передаче результата в кларионовском коде.
А настройку как применить?
 
			 
			
					
				Возврат результата работы хранимой процедуры
				Добавлено: 22 Июнь 2017, 19:19
				 Yufil
				В словаре для каждой таблицы БД записать строку в Driver Options. Или нажать кнопку с эллипсисом (...) и поискать настройку в диалоге 
Или можно в DriverOptions поставить ссылку на переменную ( например, !Glo:DriverOptions), задекларировать Glo:DriverOptions как строку и присвоить ей адекватное начальное значение
			 
			
					
				Возврат результата работы хранимой процедуры
				Добавлено: 22 Июнь 2017, 19:25
				 alex881
				Yufil писал(а): 22 Июнь 2017, 19:19
В словаре для каждой таблицы БД записать строку в Driver Options. Или нажать кнопку с эллипсисом (...) и поискать настройку в диалоге 
Или можно в DriverOptions поставить ссылку на переменную ( например, !Glo:DriverOptions), задекларировать Glo:DriverOptions как строку и присвоить ей адекватное начальное значение
 
А, понял, это driverstring, я так /trusted connection передаю. Спасибо, завтра проверю. Всеж интересно причина ошибки и почему при обычном селекте оно не появляется.
Можно еще до кучи вопрос-достаточно долго работает простой select типа 
Select * from tableName в кларионе по сравнению с его же исполнением в ms studio. В кларионе next-ами данные выбираються пару-тройку минут, а в студии выборка отрабатывает за секунды. В чем причина?
 
			 
			
					
				Возврат результата работы хранимой процедуры
				Добавлено: 23 Июнь 2017, 7:08
				 alex881
				Yufil писал(а): 22 Июнь 2017, 19:19
В словаре для каждой таблицы БД записать строку в Driver Options. Или нажать кнопку с эллипсисом (...) и поискать настройку в диалоге 
Или можно в DriverOptions поставить ссылку на переменную ( например, !Glo:DriverOptions), задекларировать Glo:DriverOptions как строку и присвоить ей адекватное начальное значение
 
Сделал так, верно?
  SqlDriverOptionsStr = '/Busyhandling=2'
  OPEN(MyFile)
  IF ERRORCODE() THEN STOP(ERROR() & ' OPEN(MyFile) ').
  SET(MyFile)
затем вышеописанный запрос. Результат - та же ошибка, что в начале темы.
 
			 
			
					
				Возврат результата работы хранимой процедуры
				Добавлено: 23 Июнь 2017, 8:47
				 Дед Пахом
				Что-то я сомневаюсь, что BUSYHANDLING в C5.5 уже был.
			 
			
					
				Возврат результата работы хранимой процедуры
				Добавлено: 23 Июнь 2017, 9:20
				 Yufil
				Это да... Это печально... Тогда надо посмотреть в разделе Using Embedded SQL как пользовать команду CALL (NoresultCall)
			 
			
					
				Возврат результата работы хранимой процедуры
				Добавлено: 23 Июнь 2017, 13:26
				 alex881
				Yufil писал(а): 23 Июнь 2017, 9:20
Это да... Это печально... Тогда надо посмотреть в разделе Using Embedded SQL как пользовать команду CALL (NoresultCall)
 
если следовать хелпу то надо сделать так
  BIND('RestOUT',RestOUT)
  MyFile{PROP:SQL} = 'NoresultCall dbo.GetRestOUT ''2017-06-21'',''40702810900370000008'' (&RestOUT[OUT])'
  и потом безо всяких NEXT результат работы хранимки вернется в переменную RestOUT?
 тут меня смущает что кларион отдать ms sql не команду EXEC а команду CALL и, я проверял в мс студии, такая команда на нашей версии не прокатывает....
чеж такое выморочено то......
need HELP!
 
			 
			
					
				Возврат результата работы хранимой процедуры
				Добавлено: 23 Июнь 2017, 15:01
				 kreator
				alex881, привожу пример SQLAnywhere (Вроде тоже Transact-SQL):
Код: Выделить всё
LOC:View2            VIEW(TempTable)
                       PROJECT(TMP:Real1)
                       PROJECT(TMP:Real2)
                       PROJECT(TMP:Real3)
                       PROJECT(TMP:Real4)
                       PROJECT(TMP:Real5)
                       PROJECT(TMP:Real6)
                     END
 
Код: Выделить всё
 open(LOC:View2)
 set(LOC:View2)
 LOC:View2{prop:SQL} = 'execute DBA.GetFreeMinima @Date1=' & LOC:Date1
 loop
   next(LOC:View2)                                        !    read a record sequentially
   if errorcode()
     break
   end
   LOC:MinSumma1 = TMP:Real1
   LOC:MinSumma2 = TMP:Real2
   LOC:MinSumma3 = TMP:Real3
   LOC:Minimum1 = TMP:Real4
   LOC:Minimum2 = TMP:Real5
   LOC:Minimum3 = TMP:Real6
 end
 close(LOC:View2)
Вдруг поможет?
 
			 
			
					
				Возврат результата работы хранимой процедуры
				Добавлено: 23 Июнь 2017, 15:31
				 alex881
				kreator писал(а): 23 Июнь 2017, 15:01
alex881, привожу пример SQLAnywhere (Вроде тоже Transact-SQL):
Код: Выделить всё
LOC:View2            VIEW(TempTable)
                       PROJECT(TMP:Real1)
                       PROJECT(TMP:Real2)
                       PROJECT(TMP:Real3)
                       PROJECT(TMP:Real4)
                       PROJECT(TMP:Real5)
                       PROJECT(TMP:Real6)
                     END
 
Код: Выделить всё
 open(LOC:View2)
 set(LOC:View2)
 LOC:View2{prop:SQL} = 'execute DBA.GetFreeMinima @Date1=' & LOC:Date1
 loop
   next(LOC:View2)                                        !    read a record sequentially
   if errorcode()
     break
   end
   LOC:MinSumma1 = TMP:Real1
   LOC:MinSumma2 = TMP:Real2
   LOC:MinSumma3 = TMP:Real3
   LOC:Minimum1 = TMP:Real4
   LOC:Minimum2 = TMP:Real5
   LOC:Minimum3 = TMP:Real6
 end
 close(LOC:View2)
Вдруг поможет?
 
ОГРОМНЕЙШЕЕ, БЕСКОНЕЧНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!!!!!!
Через вьюху оно перестало ругаться и я таки добился передачи от хранимки результата ее работы в кларион.
Еще раз благодарю!