0

我找到了另一个 Tech 发布的解决方案:

新配方:

{Product.Size} <> “xsm” or IsNull({Product.Size})

不幸的是,在预览您的报告时,您会发现这不起作用。这不是因为我们的逻辑错误,而是我认为是 Crystal Reports 中的错误。如果我采用这个完全相同的条件并使用查询分析器或查询工具将其应用于数据库记录,我会看到空白记录。不幸的是,Crystal 不允许空值通过,即使我们的公式表明它们应该如此。

规避此错误的技巧是将 IsNull() 检查 FIRST 放在公式中。

因此,如果我们将条件重新排列为:

IsNull({Product.Size}) or {Product.Size} <> "xsm"

像魅力一样工作


问题是,如果我为第二个 OR 语句选择标准,({HiredRate.UTRANSDOC}startswith{?TransYN})而为第一个选择 NO,({HiredRate.UTRANSWEB}startswith{?WebYN})我只会得到一条满足 TransYN 标准的记录。如果我将公式中的位置放在第一位,({HiredRate.UTRANSDOC}startswith{?TransYN})我会得到所有数据。

当我运行 SQL 查询时,无论它们的顺序如何,我都会得到所有数据。Crystal Preview 只为我提供 OR 部分的第一个数据。

从 SQL 中查看数据的唯一突出之处是 Crystal 返回的一条记录在 Transdoc 字段中为 YES,而 Transweb 字段为空白。对于 Transdoc,所有其他记录显示 YES,Transweb 字段显示 NULL。

这是水晶唱片选择公式

{HiredRate.CONTSUPREF} startswith {?LanguageCombo}
and    {HiredRate.ONDATE} = {?ProjectDate}
and    {HiredRate.ACTVCODE}= "SIG"
and    {HiredRate.RESULTCODE} = "CLM"
and    (
      {HiredRate.UTRANSWEB}startswith{?WebYN} 
or    {HiredRate.UTRANSDOC}startswith{?TransYN}
or    {HiredRate.UTRANLANL0}startswith{?LanloYN}
or    {HiredRate.UINTCONSEC}startswith{?InterpYN}
or    {HiredRate.UINTCONF}startswith{?IntConfYN}
or    {HiredRate.UINTOPI}startswith{?OPIYN}
      )

这是 Crystal 使用的 SQL 查询:

SELECT HiredRate.DEAR, HiredRate.CONTSUPREF, HiredRate.LASTDATE, HiredRate.CONTACT, HiredRate.USOURCLANG, HiredRate.UTARGLANG, HiredRate.UTRANSDOC, HiredRate.UTRANSWEB, HiredRate.UTRANLANL0, HiredRate.UINTCONSEC, HiredRate.UINTCONF, HiredRate.UINTOPI, HiredRate.ONDATE, HiredRate.ACTVCODE, HiredRate.RESULTCODE
FROM GoldMine_Main.dbo.HiredRate HiredRate
WHERE HiredRate.CONTSUPREF LIKE 'ENG>SPA%' AND (HiredRate.ONDATE>={ts '2012-04-01 00:00:00'} AND HiredRate.ONDATE<{ts '2013-04-06 00:00:00'}) AND HiredRate.ACTVCODE='SIG' AND HiredRate.RESULTCODE='CLM' AND (HiredRate.UTRANSWEB LIKE 'NO%' OR HiredRate.UTRANSDOC LIKE 'YES%' OR HiredRate.UTRANLANL0 LIKE 'NO%' OR HiredRate.UINTCONSEC LIKE 'NO%' OR HiredRate.UINTCONF LIKE 'NO%' OR HiredRate.UINTOPI LIKE 'NO%')
ORDER BY HiredRate.DEAR, HiredRate.CONTACT
4

1 回答 1

1

发生这种情况是因为{HiredRate.UTRANSWEB}is null - 因此表达式的其余部分在 Crystal 中评估为 null,即使(逻辑上)它不应该。

or交换前两个条件时,{HiredRate.UTRANSDOC}条件的计算结果为真,表达式的其余部分被短路——这就是选择记录原因。

于 2013-04-05T17:34:55.913 回答