變數作用域用於定義某個公式的變數可在多大程度上用於其他公式。crystal reports 中的作用域有三個級別:每個變數都有乙個作用域,該作用域在變數宣告時指定。
具有區域性作用域的變數是使用 local 關鍵字 + 型別名稱(帶有字尾 var)+ 該變數名宣告的。
區域性變數只限於單個公式以及該公式的單個求值。也就是說,無法從其他公式訪問某個公式中的區域性變數值。
示例
//公式 alocal numbervar x;
x := 10;
//公式 b
evaluateafter ()
local numbervar x;
x := x + 1;
函式呼叫 evaluateafter () 確保公式 b 在公式 a 之後求值。公式 a 返回乙個值 10,公式 b 返回乙個值 1。公式 b 無法訪問公式 a 中的 x,因此不能使用值 10 來加 1;對於公式 b 中未初始化的區域性變數 x,公式 b 改用預設值 0,因此加 1 後便得到 1。
也可以在不同的公式中使用相同的名稱、不同的樣式建立區域性變數。例如,公式 a 和公式 b 中的型別宣告與下列內容不衝突:
//公式 clocal stringvar x := "hello";
區域性變數是三種作用域中最有效的。另外,它們在不同的公式中互不干擾。因而,只要可能最好將變數宣告為區域性變數。
全域性變數使用相同的記憶體塊在整個主報表中儲存乙個值。除子報表中的公式外,該值隨後可用於所有宣告此變數的公式。如下例所示宣告全域性變數:
global stringvar y;
預設情況下,也可以省略建立全域性變數的 global 關鍵字。
stringvar y;//與 global stringvar y; 一樣
然而,雖然區域性變數容易宣告,但建議只有在全域性變數能力不足的情況下才使用區域性變數。
由於全域性變數在整個主報表中共享它們的值,因此不能在某個公式中使用某個型別宣告全域性變數後,再使用同乙個名稱在不同的公式中以不同的型別宣告全域性變數。
示例
//公式 aglobal datevar z;
z := cdate (1999, 9, 18)
//公式 b
numbervar z;
z := 20
在這種情況下,如果首先輸入並儲存公式 a,則當檢查或試圖儲存公式 b 時,crystal reports 將返回錯誤。這是因為將全域性變數 z 宣告為「數字」型別與先前在公式 a 中將其宣告為「日期」型別衝突。
全域性變數通常用於執行複雜的計算,計算的公式結果取決於實際列印的報表的分組和頁面布局。為此,需建立若干公式,將它們置於報表的不同節,並通過全域性變數使這些不同的公式互相作用。
示例
//公式 cglobal numbervar x;
x := 10;
//公式 d
//呼叫函式 whilereadingrecords
whilereadingrecords;
global numbervar x;
x := x + 1
如果將公式 c 置於「報表頁首」,然後將公式 d 置於「詳細資料」節,則公式 c 先於公式 d 求值。公式 c 經過一次求值後,「詳細資料」節每次出現記錄時,便求值公式 d。公式 c 返回 10。對於第一條明細記錄,公式 d 返回 11。這是因為 x 的值 10 在公式 c 中設定之後就被保留了。然後公式 d 將此值加 1,將 x 設定為 11 並返回 11。對於第二條明細記錄,公式 d 將 1 加到此前保留的 x 值(其值為 11)上,返回 12。對於剩餘的明細記錄,將繼續進行此過程。
呼叫 whilereadingrecords 使得 crystal reports 在讀取報表的每個記錄時重新對公式 d 求值。否則,由於該公式不包含任何資料庫字段,因此程式在從資料庫讀取記錄之前,只對該公式進行一次求值。處理連續記錄時,公式將返回值 11 而不是 11、12、13 等等。
如果表示式 x := x + 1 由 x := x + 替換,將產生基於 執行總計的效果,但是由於公式 c,起始值將是 10 而不是 0。在這種情況下,可以不必呼叫 whilereadingrecords,因為它將因公式包含資料庫欄位而自動出現。
共享變數使用相同的記憶體塊,在整個主報表及其所有子報表中儲存變數值。因而,共享變數甚至比全域性變數更普遍。若要使用共享變數,請在主報表內的公式中宣告它,如下所示:
shared numbervar x := 1000;
並在子報表內的公式中宣告它,如下所示:
shared numbervar x;
為使用共享變數,在共享變數可以在主報表和子報表之間傳遞之前,必須先宣告該變數並給其賦值。
crystalreport使用方法
使用 vs發布與iis部署 1.vs發布的時候把.rpt字尾的模板檔案 包括有dataset檔案 xsd 設定為 屬性 高階設定 生成操作 修改為 內容 複製到輸出目錄 修改為 始終複製 或 有更新時複製 這樣的目的是為了把.rpt的問題隨發布一起發布到檔案,預設是不發布的。3.把client端的c...
CrystalReport水晶報表
摘要如下 1。第一步是新增新項crystalreport1 2。在crystalreport1.rpt 面頁右鍵選擇 資料庫 新增 刪除資料庫 出現下面對話方塊 然後點開 ole db ado 的加號,將彈出選擇資料庫的對話方塊其中 專案資料 裡面的 當前連線 顯示的就是 ole db ado 的連...
CrystalReport水晶報表
摘要如下 1。第一步是新增新項crystalreport1 2。在crystalreport1.rpt 面頁右鍵選擇 資料庫 新增 刪除資料庫 出現下面對話方塊 然後點開 ole db ado 的加號,將彈出選擇資料庫的對話方塊其中 專案資料 裡面的 當前連線 顯示的就是 ole db ado 的連...