首先,我受不了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我已经尝试从菜单中执行数据库>验证数据库,这表示报告都是最新的,根本没有帮助。