水晶報表內功心法 推拉之間

2021-09-08 23:31:34 字數 1958 閱讀 7744

水晶報表程式控制上有兩種模式,也就是傳說中的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模式。但這不是絕對的,可以根據實際情況混用。如果...

水晶報表內功心法 序言

最近的一年多,因為生活比較平穩,我開始恢復我在部落格 論壇和郵件的答疑。回答問題,本身也是個開拓眼界和成長的過程。有時候回答乙個問題,需要幾天時間,去構造資料,模擬環境,和測試 但是累積下來,我發現很多問題是重複的,大部分人開始都會遇到的。而且我注意到個情況,就是有些文章,存在典型的誤導。並不說一定...