【问题标题】:Crystal Reports Record Section not returning same data as sqlCrystal Reports 记录部分不返回与 sql 相同的数据
【发布时间】:2013-04-05 17:04:35
【问题描述】:

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

新公式:

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

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

规避此错误的诀窍是将 IsNull() 检查放在公式中。

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

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

像魅力一样工作


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

当我运行 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

【问题讨论】:

  • 如果 OR 语句中的任何字段为空,Crystal 将抛出异常并停止对语句的评估......这就是顺序很重要的原因。尝试在公式编辑器中将公式设置为“空值的默认值”。

标签: crystal-reports selection record


【解决方案1】:

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

当交换前两个 or 条件时,{HiredRate.UTRANSDOC} 条件的计算结果为真,表达式的其余部分被短路 - 这就是为什么记录然后被选中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多