Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Crystal reports Can';以编程方式设置水晶报表选择公式_Crystal Reports_Automation_Formula_Crystal Reports 8.5 - Fatal编程技术网

Crystal reports Can';以编程方式设置水晶报表选择公式

Crystal reports Can';以编程方式设置水晶报表选择公式,crystal-reports,automation,formula,crystal-reports-8.5,Crystal Reports,Automation,Formula,Crystal Reports 8.5,首先,我受不了克里斯托!好吧,这是我的心里话 现在,我们为客户维护了一个旧的VB6应用程序,它使用Crystal Automation库以编程方式更改一系列Crystal Reports 8.5报告中的记录选择公式 有两份报告几乎完全相同。我最近不得不更改它们,以便从另一个表中添加另一个字段。但是,当我将表添加到报表中时,虽然它在可视化设计器中添加了表,但它没有将表添加到SQL语句的FROM子句中。因此,我手动编辑了SQL语句以添加额外的联接。高,很好用。如果我在Crystal preview模

首先,我受不了克里斯托!好吧,这是我的心里话

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

有两份报告几乎完全相同。我最近不得不更改它们,以便从另一个表中添加另一个字段。但是,当我将表添加到报表中时,虽然它在可视化设计器中添加了表,但它没有将表添加到SQL语句的FROM子句中。因此,我手动编辑了SQL语句以添加额外的联接。高,很好用。如果我在Crystal preview模式下运行这些报告,它们将完全按照预期工作

现在,用户开始在VB应用程序中测试更改。其中一份报告写得很好。但是,另一份报告未能按预期设置选择公式

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

但是,报告失败,出现错误:
错误代码:534-数据库DLL检测到错误。
出于调试目的,代码转储报告当前使用的SQL字符串。报告中的SQL是:

SELECT ... FROM ... 
WHERE

ORDER BY ...
正如您所看到的,WHERE子句是空的,我可以想象这就是为什么数据库DLL在这条语句上运行的原因。我不明白为什么自动化库没有设置WHERE子句,即使对
PESetSelectionFormula
的调用被传递一个有效字符串并返回success。我想这可能是因为我在报告中手动编辑了SQL以添加它没有添加的表,但我在另一个几乎相同的报告中也做了同样的事情,其中一个工作正常

有人知道为什么
PESetSelectionFormula
可能会报告成功,但实际上什么都不做吗

p.S.我已经尝试过从菜单中创建一个数据库>验证数据库,这说明报告是最新的,没有任何帮助

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

  • 您的最终SQL查询是否使用任何不常见的函数,例如nz()?Crystal并不总是识别VB函数,imho

  • 您导入的数据中是否有任何导致冲突的空值

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


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


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

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

    我的老板度假回来,看着它。。。什么都没做,现在它可以工作了。 他向我展示了他所做的一切,他没有改变报告,也没有对报告做任何修改,只是我采取了相同的调试步骤,但现在它神奇地工作了

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

    问题是它什么都没做。这两种行为都可以,因为报告本身没有记录选择公式。所以,不管它是附加还是替代[什么都没有],我真的不在乎。但它根本没有在报告中加入新的公式。。。即使PESetSelectionFormula返回成功。请尝试以下操作:在设计器中创建记录选择公式。接下来,使用COM组件获取该值。这能正常工作吗?如果是,请检查字符串中的最后一个字符。它是一个空终止字符吗(我想不出它的真实名称)?尽管,不可否认,我们仍然在使用Crystal 8.5,我知道它们现在至少达到了,什么,11?我知道设计师有了很大的改进。。。说句公道话,也许核心功能也有。从CR12/2008开始。。。不,没有。CR和BOb是我用过的最差的付费软件。只是几十个例子中的一个小例子:每一个微小的变化都会产生一堆模态对话框。