4

Nevrona Designs 的 Rave Reports是一个供Embarcadero 的 Delphi IDE 使用的报告引擎。

这就是我所说的 Rave Endless Loop 错误。在与 Delphi 2006 捆绑在一起的 Rave Reports 版本 6.5.0 (VCL10) 中,有一个臭名昭著的错误困扰着许多 Rave 报告开发人员。如果您有一个非空数据集,并且该数据集的数据行完全适合一个页面(也就是说,有零个寡妇行),那么在 PrintPreview 时,Rave 将陷入生成页面的无限循环。

此新闻组先前已在以下标题下报告过此问题:

  1. “错误:生成无限页”;雨果·海拉姆 20/9/2006 8:44PM
  2. “狂欢循环错误。请帮助”;托马斯·拉扎尔 2006 年 11 月 7 日晚上 7:35
  3. “循环整页数据?”;托尼·奇斯蒂安森 23/12/2004 下午 3:41
  4. 另一投诉人对(3)的答复;奥利弗·皮切
  5. “无尽的 lopp 打印错误”;Richso 2004 年 9 月 11 日下午 4:44

在每个帖子中,Nevrona 都没有回应,也没有报告解决方案。

可能,相关新闻组 (nevrona.public.rave.reports.general) 也报告了该问题,即: 6. “持续生成报告”;Jobard 20/11/2005 虽然我不清楚 (6) 是 Rave Endless 循环错误还是其他问题。这篇帖子确实得到了 Nevrona 的回复,但它更多地与多个区域有关(“使用多个区域时会出现问题,跨越分页符。”)而不是零寡妇的问题。

4

4 回答 4

2

这与其说是真正的解决方案,不如说是一种变通方法。我首先在 Nevrona 新闻组上发布了这个解决方法(Group=nevrona.public.rave.developer.delphi.rave; Subject="你是否患有 Rave Endless Loop 错误?:解决方法已宣布。"; Date=13 /11/2006 下午 7:06)

所以这是我的解决方案。这与其说是一个好的长期解决方案,不如说是一种变通方法,我希望 Nevrona 在不久的将来会认真关注这个问题。

  1. 给定您的特定报表布局,计算每页的最大行数。让我们说这是40。
  2. 设置一个计数器来计算页面中的行数(而不是整个报告中的行数)。您可以通过事件脚本或 CalcTotal 组件来执行此操作。
  3. 为主数据带定义一个 OnBeforePrint 脚本事件处理程序。
  4. 在此事件处理程序中,当每页行数低于最大值一或两(在我们的示例中,这将是 38)时,将主数据带的 FinishNewPage 属性设置为 True。并在所有其他情况下将其设置为 False。这样做的效果是给每个页面一个非零数量的寡妇(在本例中为 1..38),从而避免了导致 Rave Endless 循环问题的条件。
于 2008-09-16T02:37:26.023 回答
1

非常感谢这个 Sean - 不幸的是,这对我不起作用,但我想出了另一个解决方案......你看我在区域顶部有一个备忘录,可能会根据用户有多少笔记而扩展或收缩留在数据库中。这意味着页面上可以容纳的行数会有所不同。然而。还有另一种解决方案 - 您使用数据带的 MaxHeightLeft 属性。您所做的就是测量数据带的高度,将其乘以 2,然后将其放入您的 MaxHeightLeft 属性中。如果它填满了那么多,这将强制 1 或 2 条记录进入下一页。

于 2009-01-23T23:47:29.283 回答
0

非常感谢,这个线程帮助我解决了我在 Nevrona Rave 中无休止打印循环的问题......,我将 MinHeightLeft 设置为 0,500,这个设置是有效的,但我不确定它是否适用于我的其他结果集查询报告。

于 2009-07-12T16:36:18.733 回答
0

大师,解决方案是 MinHeightLeft 到 0,500 ,我在 true 中使用属性 wastefit area 并在第二次打印中生成循环,但是当将属性 MinHeightLeft 更改为 0,500 时,错误消失了。

谢谢 !

阿特·法比奥拉·埃雷拉。Fabi_ucv@hotmail.com

于 2010-06-22T12:48:48.693 回答