您打算从水晶报表界面运行水晶报表还是作为嵌入在其他程序中的插件(例如,您可以使用Crystal Reports ActiveX Designer运行时支持 - craxdrt.dll - 在VB代码中)?在最后一种情况下,可以在启动报表之前操作报表的每个对象。然后根据您的需要更新参数等对象。
作为这种运行时更新的简单示例,我的报告打印例程将全程检查报告中是否存在名为“printedBy”的字段。如果找到该字段,它的值将被解析为请求报告的用户的域名并将被打印出来。
在更高层次上,您甚至可以重塑报表SQL字符串以添加可从您的代码继承的特定过滤器。这样,你甚至不需要再参数:让你的代码添加“对飞”
编辑过滤值:一些代码示例:
(m_rapport是CRAXDRT.report对象,ActiveSession是我现在的会话对象)
If m_rapport.ParameterFields.Count > 0 Then
For i = 1 To m_rapport.ParameterFields.Count
If m_rapport.ParameterFields(i).Name = "{?PUB_DateDebutPeriode}" Then
m_rapport.ParameterFields(i).AddCurrentValue CDate(DateValue(sessionActive.dateDebutPeriode))
End If
If m_rapport.ParameterFields(i).Name = "{?PUB_DateFinPeriode}" Then
m_rapport.ParameterFields(i).AddCurrentValue CDate(DateValue(sessionActive.dateFinPeriode))
End If
If m_rapport.ParameterFields(i).Name = "{?PUB_id_Personne}" Then
m_rapport.ParameterFields(i).AddCurrentValue StringFromGUID(clientActif.id_Personne)
End If
Next i
Endif
我也有另一种功能,改变报告的数据源在运行时,这样的报表可以在不同的服务器/位置来执行。
我找到了关于代码示例的评论。我将它们添加到我的答案中。 – 2009-01-09 12:35:44