1

首先,我受不了Crystal!好吧,这是我的胸...

现在,我们为客户维护了一个旧的VB6应用程序,它使用 Crystal 自动化库以编程方式更改一组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可能会报告成功但实际上没有做任何事情?

PS我已经尝试从菜单中执行数据库>验证数据库,这表示报告都是最新的,根本没有帮助。

4

3 回答 3

0

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

我不记得这个开关是什么时候发生的,但你应该很容易确定发生了哪种行为。

于 2010-04-06T16:13:08.930 回答
0

好吧,这就是我鄙视 Crystal Reports 的典型原因。

我的老板放假回来,看了看,……什么也没做,现在可以了。他向我展示了他所做的一切,他没有更改或对报告做任何事情,就像我采取的相同调试步骤,但现在它神奇地起作用了。

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

于 2010-04-07T16:59:56.273 回答
0

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

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

  2. 导入的数据中是否有任何会造成冲突的空值?

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

于 2010-04-05T19:20:16.697 回答