Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / RS2005:Как использовать multiValue параметр в процедуре? / 7 сообщений из 7, страница 1 из 1
17.08.2009, 12:39
    #36147390
minya13_85
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RS2005:Как использовать multiValue параметр в процедуре?
Работаю в RS2005. Есть некая процедура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE PROCEDURE [dbo].[ddd]
@Fdata datetime,@Ldata datetime,@Proba int
AS
BEGIN
    SELECT  Artikul,proba,data
    FROM  main.dbo.jornal       
    WHERE  data>=@Fdata and data<=@Ldata and Proba in (@Proba)
END
Использую данную процедуру в отчете. Параметру @Proba ставлю: MultiValue, чтобы пользователи смогли выбрать несколько значений проб галочками. одно значение нормально, два значения не передает, выдает ошибку.
Как это можно реализовать? Читал посты на эту тему, я там ничего не понял. Понял что нужно создать таблицу некую и туда записывать выбранные пробы, а потом
Код: plaintext
 where Proba in (select Proba from Table)
А как туда записывать то, что выбрал пользователь?
...
Рейтинг: 0 / 0
17.08.2009, 13:14
    #36147509
Bigheadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RS2005:Как использовать multiValue параметр в процедуре?
1) Что за ошибка?
2) У вас параметр @Proba описан как int. А это одно значение! Каким образом по-вашему процедура должна принять на вход несколько значений?

Если вы вставите в текст запроса датасета собственно сам запрос (а не вызов хранимки):
Код: plaintext
1.
2.
3.
    SELECT  Artikul,proba,data
    FROM  main.dbo.jornal       
    WHERE  data>=@Fdata and data<=@Ldata and Proba in (@Proba)
и сделаете привязку параметров, то все должно успешно заработать. Если очень нужна именно хранимка (вы уверены в этом?!), то необходимы дополнительные действия.
...
Рейтинг: 0 / 0
17.08.2009, 13:38
    #36147585
minya13_85
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RS2005:Как использовать multiValue параметр в процедуре?
Bigheadman1) Что за ошибка?
2) У вас параметр @Proba описан как int. А это одно значение! Каким образом по-вашему процедура должна принять на вход несколько значений?

Если вы вставите в текст запроса датасета собственно сам запрос (а не вызов хранимки):
Код: plaintext
1.
2.
3.
    SELECT  Artikul,proba,data
    FROM  main.dbo.jornal       
    WHERE  data>=@Fdata and data<=@Ldata and Proba in (@Proba)
и сделаете привязку параметров, то все должно успешно заработать. Если очень нужна именно хранимка (вы уверены в этом?!), то необходимы дополнительные действия. нужна хранимка это точно, я указал просто пример. А вообще у меня используются временные таблицы, курсоры и т.д.
...
Рейтинг: 0 / 0
17.08.2009, 13:42
    #36147605
Bigheadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RS2005:Как использовать multiValue параметр в процедуре?
Тогда с помощью Expression вы можете сформировать строку со всеми выбраннымии Value параметра и передать ее в хранимку.
Код: plaintext
=Join(Parameters!Param.Value,",")
А в хранимке выполняйте парсинг и обрабатывайте дальше, как вам нужно.
...
Рейтинг: 0 / 0
17.08.2009, 13:49
    #36147637
minya13_85
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RS2005:Как использовать multiValue параметр в процедуре?
BigheadmanТогда с помощью Expression вы можете сформировать строку со всеми выбраннымии Value параметра и передать ее в хранимку.
Код: plaintext
=Join(Parameters!Param.Value,",")
А в хранимке выполняйте парсинг и обрабатывайте дальше, как вам нужно.Можно по-подробнее? Я что-то не понял.
...
Рейтинг: 0 / 0
17.08.2009, 14:05
    #36147697
--__Александр__--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RS2005:Как использовать multiValue параметр в процедуре?
minya13_85
1) Посмотрите профайлером, какую строку на вход подается в вашу хп, когда выбирается несколько значений.
2) Перепишите вашу ХП так, что бы она корректно обрабатывала эту входную строку.
...
Рейтинг: 0 / 0
17.08.2009, 14:41
    #36147862
minya13_85
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RS2005:Как использовать multiValue параметр в процедуре?
--__Александр__--minya13_85
1) Посмотрите профайлером, какую строку на вход подается в вашу хп, когда выбирается несколько значений.
2) Перепишите вашу ХП так, что бы она корректно обрабатывала эту входную строку.
В общем сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Создал функцию:

CREATE FUNCTION [dbo].[Proba_Vibor] (@Proba ntext)
RETURNS 
@tbl TABLE 
(listpos int IDENTITY( 1 ,  1 ) NOT NULL,number  int NOT NULL)
AS
BEGIN
	DECLARE @pos      int,
              @textpos  int,
              @chunklen smallint,
              @str      nvarchar( 4000 ),
              @tmpstr   nvarchar( 4000 ),
              @leftover nvarchar( 4000 )

      SET @textpos =  1 
      SET @leftover = ''
      WHILE @textpos <= datalength(@Proba) /  2 
      BEGIN
         SET @chunklen =  4000  - datalength(@leftover) /  2 
         SET @tmpstr = ltrim(@leftover + substring(@Proba, @textpos, @chunklen))
         SET @textpos = @textpos + @chunklen

         SET @pos = charindex(',', @tmpstr)
         WHILE @pos >  0 
         BEGIN
            SET @str = substring(@tmpstr,  1 , @pos -  1 )
            INSERT @tbl (number) VALUES(convert(int, @str))
            SET @tmpstr = ltrim(substring(@tmpstr, @pos +  1 , len(@tmpstr)))
            SET @pos = charindex(',', @tmpstr)
         END

         SET @leftover = @tmpstr
      END

      IF ltrim(rtrim(@leftover)) <> ''
         INSERT @tbl (number) VALUES(convert(int, @leftover))
	RETURN 
END

В процедуре прописал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE PROCEDURE [dbo].[ddd]
@Fdata datetime,@Ldata datetime,@Proba nvarchar( 10 )
AS
BEGIN
    SELECT  Artikul,proba,data
    FROM  main.dbo.jornal       
    WHERE  data>=@Fdata and data<=@Ldata and Proba in (select number from [dbo].[Proba_Vibor] (@Proba))
END

в параметре проба изменил integer на string, поставил значение multivalue, всё сработало.
...
Рейтинг: 0 / 0
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / RS2005:Как использовать multiValue параметр в процедуре? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]