水晶報表程式控制上有兩種模式,也就是傳說中的pull模式和push模式。口語化點就是拉模式和推模式。
把這個放在最開始講,是因為模式的選擇,會影響到後續的開發。
特別是看到一些使用者,把兩種模式的**裡捏在乙個過程裡,出了錯誤,都不知道怎麼去除錯。
本文將講解兩種模式的基本原理,區別,以及各自的優缺點,還有部分開發報表的基本原則。
1.1 拉(pull)模式:
由水晶報表模板(引擎)直接連線資料庫(源),從資料庫(源)里拉取資料
就是我們在水晶報表裡設定好資料庫資訊,以及相關的表。
當我們在程式中呼叫水晶報表引擎,掛載模板後,水晶報表引擎會根據模板裡的資料庫資訊,及表資訊主動連線資料庫,
返回資料給報表模板,模板根據設計樣式進行呈現。
基本流程如下圖所示
1.2 推(push)模式:
由應用程式從資料庫(源)獲取資料,然後把資料推送給水晶報表引擎。水晶報表本身不不跟資料庫進行互動。
其基本流程圖如下
對比兩個圖,黑色的箭頭表示我們要自己進行編碼,藍色的箭頭表示是水晶報表與資料來源的自動互動過程,不需編碼。
這樣我們很容易看到,使用push模式將會比pull模式多了不少**。
而且因為pull模式是直連資料庫,比push模式的先獲取資料結果,然後推送給水晶報表少了乙個過程。而中間結果集本身就占用系統資源。
所以pull模式比push執行效率高。
那麼兩者的差異就出來了
1:pull模式**量少
2:pull模式執行效率高
3:實際開發過的朋友也有體會,使用pull模式,模板開發的速度也比push模式模板簡單一些
這幾點上,似乎pull模式已經完全把push模式打敗了,呵呵。
那麼為什麼 push模式還存在,且被大量使用呢?
我們再返回去看上面兩個示意圖,
大家注意到圖1-1-1中,是由水晶報表連線的資料庫,也就是說,水晶報表引擎單獨占用了乙個資料庫連線。
而只有在水晶報表物件釋放後,資料庫連線才會釋放(這個時段對系統時間來說,是比較長的,特別是如果要翻頁等需要長時間連線資料庫的情況)。
而在圖1-1-2中,資料庫是由應用程式去連線的,水晶報表本身不連線資料庫。這樣,系統就能使用公用的資料庫連線。
這樣一來,就節約了資料庫的連線消耗。
這一點,在多使用者的系統環境內,少一次資料庫連線對系統效能的影響對系統的影響是比較關鍵的。
當然,我們也應該注意到,push因為存在乙個dataset,所以會占用系統資源。
這兩個方面大家需要綜合考量。
這是個基本的,下面我在列一下push的優勢。
1:可以公用系統資料庫連線,減少資料庫連線損耗
2:可自由組合多資料來源(如多資料庫等),這一點pull模式也可以實現,但是不如這個方便
3: 靈活多變
靈活多變的說法,是因為由於我們是把資料獲取後,再push給水晶報表的,那麼在這個中間,就有很多資料再加工的可能性。
大家可以看一下我之前寫的
動態(萬能)水晶報表:任意表,任意列,動態格線調整
水晶報表動態表擴充套件 之 任意無關聯表,任意列,任意資料來源
水晶報表動態表擴充套件 之 任意sql及任意有關聯表,任意列 及其他
好了,總結一下:
1:cs模式或小型系統,建議用pull模式,大型bs系統,建議用push模式。
但這不是絕對的,可以根據實際情況混用。如果是大資料量的清單類的報表,建議用pull。
2:無論什麼模式,返回盡可能少的資料給報表。
3:通常情況下,無論是pull還是push模式,資料來源處理部分只負責把資料傳給報表,至於怎麼呈現是報表裡去做的
有的人問到:做交叉表怎麼傳資料,做圖表怎麼傳資料,做列表怎麼傳資料,實質上,做法都是一樣的。
當然,特殊情況除外。如:sql交叉表,自定義圖表等等。
預告:pull和push模式的樣板招式
水晶報表內功心法 推拉之間
水晶報表動態表擴充套件 之 任意無關聯表,任意列,任意資料來源 水晶報表動態表擴充套件 之 任意sql及任意有關聯表,任意列 及其他 好了,總結一下 1 cs模式或小型系統,建議用pull模式,大型bs系統,建議用push模式。但這不是絕對的,可以根據實際情況混用。如果是大資料量的清單類的報表,建議...
水晶報表內功心法 推拉之間
索引 水晶報表內功心法 序言 水晶報表動態表擴充套件 之 任意無關聯表,任意列,任意資料來源 水晶報表動態表擴充套件 之 任意sql及任意有關聯表,任意列 及其他 好了,總結一下 1 cs模式或小型系統,建議用pull模式,大型bs系統,建議用push模式。但這不是絕對的,可以根據實際情況混用。如果...
水晶報表內功心法 序言
最近的一年多,因為生活比較平穩,我開始恢復我在部落格 論壇和郵件的答疑。回答問題,本身也是個開拓眼界和成長的過程。有時候回答乙個問題,需要幾天時間,去構造資料,模擬環境,和測試 但是累積下來,我發現很多問題是重複的,大部分人開始都會遇到的。而且我注意到個情況,就是有些文章,存在典型的誤導。並不說一定...