代码之家  ›  专栏  ›  技术社区  ›  eidylon

无法编程设置水晶报表选择公式

  •  1
  • eidylon  · 技术社区  · 14 年前

    首先,我受不了水晶!好吧,那是我的心里话…

    现在,我们有一个 VB6 我们为一个客户端维护的应用程序,它使用Crystal Automation库以编程方式更改一组记录选择公式 Crystal报告8.5 报告。

    有两份报告几乎相同。我最近不得不更改它们以从另一个表中添加另一个字段。不过,当我将表添加到报表中时,当它添加到可视化设计器中时,并没有将其添加到sql语句的from子句中。所以,我手动编辑了sql语句以添加额外的连接。寇,干得不错。如果我在Crystal预览模式下运行报表,它们将完全按照预期工作。

    现在,用户去测试vb应用程序中的更改。其中一份报告做得很好。然而,另一份报告未能按预期设置选择公式。

    代码使用函数设置选择公式 PESetSelectionFormula . 通过对变量的逐步检查,我验证了作为新选择公式传递给函数的字符串是正确的。呼唤 PesetSelectionFormula公式 似乎工作正常,返回的值是1,我在任何地方都能找到它,这表明成功了。(另一个从代码中运行良好的报告也返回1。)

    但是,报告失败,出现错误: Error Code: 534 - Error detected by database DLL. 出于调试目的,代码将转储出报表当前使用的SQL字符串。报告中的SQL是:

    SELECT ... FROM ... 
    WHERE
    
    ORDER BY ...
    

    如您所见,where子句是空的,我可以想象这就是为什么数据库dll在这条语句上挂载的原因。我不明白为什么自动化库没有设置where子句,即使调用 PesetSelectionFormula公式 正在传递有效字符串并返回成功。我想可能是因为我在报表中手动编辑了sql以添加它没有添加的表,但是我在另一个几乎相同的报表中也做了同样的事情,其中一个运行良好。

    有人知道为什么 PesetSelectionFormula公式 可能报告成功,但实际上什么也没做?

    附笔。 我已经试过了 数据库>验证数据库 从菜单上看,报告都是最新的,根本没有帮助。

    3 回复  |  直到 12 年前
        1
  •  0
  •   PowerUser    14 年前

    我从没用过 PesetSelectionFormula公式 ,但导入其他可接受的数据时遇到问题:

    1. 最后的sql查询是否使用了任何不常见的函数,即nz()?Crystal并不总是能识别VB函数,Imho。

    2. 导入的数据中是否有导致冲突的空值?

    3. 收集完数据后,你能把它放到一个临时表中,告诉crystal从那个临时表中提取数据吗?如果您对1或2有问题,这可能是一个很好的解决方法。

        2
  •  0
  •   craig    14 年前

    在某些版本的cr中,pesetselectionformula将新值附加到现有的记录选择公式中,在其他版本中,pesetselectionformula 替换 具有新值的现有记录选择公式。

    我不记得什么时候发生了这种转变,但你应该很容易确定发生了什么行为。

        3
  •  0
  •   eidylon    14 年前

    好吧,这就是我鄙视水晶报告的典型原因。

    我的老板度假回来,看了看…什么也没做,现在它成功了。 他向我展示了他所做的一切,他没有改变报告,也没有对报告做任何事情,只是和我所做的调试步骤一样,但现在它神奇地工作了。

    我真的不喜欢那些自动停止并开始像这样工作的软件。 谢谢你的建议。