Crystal отчеты и хранимые процедуры

Я новичок в Crystal Reports и все еще учусь, поэтому мне интересно, как мне это сделать. У меня есть следующая хранимая процедура:

CREATE PROCEDURE GetSurveyAnswerDetail
(@Question VARCHAR(255) = NULL, @AllowReportFlag CHAR(1) = NULL)
AS
    SET NOCOUNT ON
    DECLARE @rc INT
    SET @rc = 1

    IF (@Question IS NULL OR DATALENGTH(@Question) = 0
        OR @AllowReportFlag IS NULL OR DATALENGTH(@AllowReportFlag) = 0)
        RAISERROR('GetSurveyAnswerDetail is missing parameters.', 16, 1)
    ELSE
        BEGIN
            DECLARE @AllowReport VARCHAR(100)
            IF (@AllowReportFlag = 'N')
                SET @AllowReport = ' AllowReport = ''Y'' AND '
            ELSE
                SET @AllowReport = ''

            DECLARE @SQLStatement VARCHAR(5000)
            SET @SQLStatement = 'SELECT COUNT(' + @Question + ') FROM tblSurveyAnswer WHERE ' + @AllowReport + @Question + ' != '''' GROUP BY ' + @Question + ' ORDER BY ' + @Question + ' DESC'
            EXEC (@SQLStatement)

            IF @@ERROR <> 0
                RAISERROR('GetSurveyAnswerDetail has failed. Question may not exist.', 16, 1)
            ELSE
                SET @rc = 0
        END
RETURN @rc
GO

Это возвращает список чисел. Я хотел бы создать круговую диаграмму из этих чисел в Crystal Reports. Я знаю, что вы можете установить свой источник данных из хранимой процедуры, но когда я это делаю, я не могу выбирать поля. Вероятно, я поступаю неправильно, поэтому буду благодарен за любые комментарии.

10.11.2009 20:35:28
Привет, dotjoe, я немного отредактировал вопрос, чтобы понять, в чем заключается моя проблема. Спасибо.
Michael 12.11.2009 21:16:23
2 ОТВЕТА
РЕШЕНИЕ

Майкл, попробуй заставить свою хранимую процедуру вернуть таблицу. Я предполагаю, что вы не видите никаких полей, потому что вы не возвращаете их. Измените обратную строку на

SELECT @rc AS Result

Это должно показать вам результат в виде поля в отчете. Я не уверен, что вы можете запустить процесс отдельно в цикле для создания круговой диаграммы. Возможно, вам придется вернуть все нужные данные из одной хранимой процедуры.

2
12.11.2009 21:25:56
+1 он исполняет этот динамический sql ... но это все равно будет только 1 число.
dotjoe 12.11.2009 21:45:04
именно дотхо Это должно быть тривиально сделать версию этого, которая перебирает список значений и предоставляет весь набор данных за один раз.
theo 12.11.2009 22:22:33

Там должен быть selectзапрос , который не скрывается позади ifзаявления. Если вы сохранили процедуру:

If @question = 'Y'
    begin
    SET @SQLStatement = 'select field from table where condition='OK'
    EXEC (@SQLStatement)
end

В этом примере нет поля не будет отображаться. Измените это на:

If @question = 'Y'
    begin
    SET @SQLStatement = 'select field from table where condition='OK'
end
else
    Begin
    select field from table where condition='impossiblecondition'
end

В этом примере это будет работать и поля будут показаны.

Я создаю фиктивный параметр, как @questionи передать «Y».

0
3.08.2012 19:06:00