Crystal Reports行计数器不提供空结果集的结果

时间:2014-01-20 01:58:06

标签: crystal-reports

我正在编辑其他人开发的Crystal Report。我对水晶不是很精通,所以我希望有人能在这里发现我出错的地方。

我们正在使用 Crystal Reports 2008

此报表在子报表中有一个查询,该查询获取符合特定条件的一组行,然后计算与特定公式匹配的返回行数。匹配的行将g_bIsMatching设置为true。

行计数增加一个如下所示的公式:

// Counter Increment

WhilePrintingRecords;

shared NumberVar s_lMatchCount;
global BooleanVar g_bIsMatching;

if g_bIsMatching
then
    s_lMatchCount := s_lMatchCount + 1;

"The count of matched rows is now " & totext(s_lMatchCount, "#") & "."

还有另一个公式在打印记录后返回共享计数器值。这用于将匹配的行数从子报表传递回父报表。这是它原始的,非常简单的定义(在我自己的改变之前):

// Total Count

shared NumberVar s_lMatchCount;

s_lMatchCount

但是,此报告必须回溯一整年,并且当前的数据库系统尚未安装那么长时间。因此,我必须合并遗留系统中的一些数据。我不是试图以某种方式将旧数据合并到数据库中,而是创建了一些参数,允许用户在运行报表时提供遗留系统数据。我将相应参数的值添加到总数中。这会将最终公式更改为:

// Total Count

shared NumberVar s_lMatchCount;

// Add legacy data, which is supplied in parameters, a different one for each month.
if {EPISODE.END_DATE} >= #1/1/2012# and {EPISODE.END_DATE} < #2/1/2012# then
s_lMatchCount := s_lMatchCount + {LegacyCount_2012_01};
if {EPISODE.END_DATE} >= #2/1/2012# and {EPISODE.END_DATE} < #3/1/2012# then
s_lMatchCount := s_lMatchCount + {LegacyCount_2012_02};

// and so on for a bunch of other months...

s_lMatchCount

当主数据库中有结果返回时,这对我有用。但是,当主数据库根本没有返回任何行时,那个应该显示s_lMatchCount的框是空白的。

我的值的数据范围应该在这里触发if子句,但它们不会;相反,我根本没有得到任何结果。

我在“总计数”公式上尝试了多种变体,让它至少显示某种默认值,但无论我做什么,我都得不到结果;这让我觉得它根本没有运行。

即使结果集的行数为零,如何获取s_lMatchCount的值?

我哪里错了?我可以在这里更改一些小东西,或者我是否遇到了Crystal Reports的一个基本限制,它与我用于获取此行数的方法发生冲突?

2 个答案:

答案 0 :(得分:0)

在某种程度上我理解这个问题尝试下面的解决方案。

在所有If语句的末尾写下linw。

否则 s_lMatchCount=0

OR

Else If ISNULL({LegacyCount_2012_02})
Then s_lMatchCount=0

答案 1 :(得分:0)

我最终弄清楚上面描述的报告中出了什么问题。

计算s_lMatchCount的总计数公式使用一堆if语句:

if {EPISODE.END_DATE} >= #1/1/2012# and {EPISODE.END_DATE} < #2/1/2012# then

这些语句引用数据库中的列{EPISODE.END_DATE}。如果没有数据从数据库返回,那么显然这是无用的。我对正在发生的事情的理解是,这个引用强制在处理行时计算公式,这意味着由于没有行,所以根本不会对它进行处理。

我能够通过用参数引用替换数据库中的日期来解决问题。