您打算從水晶報表界面運行水晶報表還是作爲嵌入在其他程序中的插件(例如,您可以使用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