无法以编程方式设置Crystal报表选择公式

时间:2010-04-05 16:33:00

标签: crystal-reports automation formula crystal-reports-8.5

首先,我受不了水晶!好的,那是我的胸膛......

现在,我们为客户端维护了一个旧的 VB6 应用程序,该应用程序使用Crystal Automation库以编程方式更改 Crystal Reports 8.5中的记录选择公式报道。

有两个报告几乎完全相同。最近我不得不更改它们以从另一个表中添加另一个字段。当我将表添加到报表中时,虽然它将它添加到可视化设计器中,但它没有将它添加到SQL语句的FROM子句中。因此,我手动编辑了SQL语句以添加到其他连接中。 KO,效果很好。如果我在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可能会报告成功但实际上没有做任何事情?

P.S。我已经尝试过做数据库>从菜单中验证数据库,并说该报告是最新的,并没有任何帮助。

3 个答案:

答案 0 :(得分:0)

我从未使用过 PESetSelectionFormula ,但我在导入其他可接受的数据时遇到了问题:

  1. 您的最终SQL查询是否使用任何不常见的函数,即nz()? Crystal并不总能识别VB函数,imho。

  2. 您导入的数据中是否存在创建冲突的空值?

  3. 收集数据后,您是否可以将其放入临时表中并告诉Crystal从该临时表中获取数据?如果您遇到#1或#2的问题,这可能是一个很好的解决方法。

答案 1 :(得分:0)

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

我不记得何时发生此切换,但您应该很容易确定正在发生的行为。

答案 2 :(得分:0)

好的,这就是为什么我只是鄙视Crystal Reports的典型原因。

我的老板从假期回来,看着它,......什么也没做,现在它起作用了。 他向我展示了他的所作所为,他没有改变或对报告做任何事情,只是我采取了相同的调试步骤,但现在它神奇地起作用了。

我真的不喜欢自动停止并开始像这样工作的软件。 谢谢你的想法。