首页 文章

Crystal报表和存储过程

提问于
浏览
0

我是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中根据这些数字创建一个饼图 . 我知道您可以从存储过程设置数据源,但是当我这样做时,我没有可以选择的字段 . 我可能会以错误的方式解决这个问题,所以我很感激任何评论 .

2 回答

  • 0

    迈克尔,尝试让你的存储过程返回一个表 . 我的猜测是你没有看到任何字段,因为你没有返回任何字段 . 将返回行更改为

    SELECT @rc AS Result
    

    这应该将结果显示为报告中的字段 . 我不确定你是否可以在循环中单独运行proc来制作饼图 . 您可能需要从一个存储过程中返回所需的所有数据 .

  • 2

    mustselect 查询,它隐藏在 if 语句后面 not . 如果你的存储过程是:

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

    在此示例中,将显示 no 个字段 . 将其更改为:

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

    在此示例中,将显示 will 工作和字段 .

    我创建了一个虚拟参数,如 @question 并传递'Y' .

相关问题