Delphi擅長做數據庫系統的開發,其功能強大,開發快速。但現在大多數的數據庫系統80%的工作都是簡單的增刪改的工作,用數據庫系統來實現增刪改,存在錄入不方便,錄入內容簡單等問題,尤其對於處理大量的文本和圖片的數據庫系統來說更是非常不便。報表輸出還需要利用Delphi中各個版本提供的報表工具或第三方打印控件進行開發。雖然Delphi中提供的報表工具功能逐漸強大,使用愈加方便,但是如果想充分利用該報表工具開發強大實用的報表,仍得花費一定的精力去學習該報表組件的各個功能。例如Delphi6中提供的Qreport報表工具,對於制作復雜報表非常麻煩,也許BorLand也注意到了這個問題,所以到了Delphi7時,換成了Rave報表工具,該工具相比Qreport更易於使用,但如果要做出復雜的報表,仍需對它詳細研究。
在做文字處理的時候,中國的大多數用戶還是習慣於使用Office,而Office中最常用的莫過於Word。因此大多數用戶對於Word的操作應該說非常熟悉,而Word在數據錄入方面功能之強大確實是無與倫比,在Word中無論簡單的文本、表格還是圖片等都能很輕松的錄入,利用Word本身的打印功能還可以將其作為報表輸出的工具。
Delphi+Word的數據庫系統設計思路
結合Delphi和Word本身的特點,數據庫系統可以采用這樣的設計思路:以Word作為數據錄入界面,錄入完畢後,數據庫系統自動從Word中提取數據,並將提取的各要素存儲於數據表中,以便利用數據庫系統的強大的數據處理功能對數據表內容進行維護、檢索、統計等,並將Word作為報表輸出的工具。
Delphi中從Delphi5開始恰恰提供了與Word的接口—TwordApplication,利用該接口可以實現Word的打開、關閉、保存以及對文檔內容作相應的處理。采用以上的系統設計思想以及Delphi提供的與Word的數據接口,筆者開發了一套成果管理系統。該成果管理系統主要內容是管理最終成果文檔的內容,包括詳細內容、文字圖片、成果的儲備情況、經費情況、獲獎情況等,為了便於統計分析及保證成果內容的一致性,系統將各要素統一存放於數據表相應的字段中。下面詳細闡述系統的設計思路,參見圖1。
圖1 系統設計思路流程圖
首先篩選必要的成果要素利用Word作一個錄入模板。Word模板較常見的有兩種做法:一種是在Word文檔相應的位置插入書簽;另一種是在Word文檔的相應位置插入特殊符號。插入書簽的具體做法是:選中要插入書簽的區域,在Word的插入菜單中選擇書簽,填寫書簽名稱,點擊添加即可。在Word文檔中插入特殊符號的思路是:將需要提取的內容用特殊字符包起來,系統利用特殊字符識別要導入的內容,例如#中國#,表示中國是要提取的內容。但是利用以上兩種模板制作方法都有缺陷,尤其是將模板既作為輸出界面,也將其作為錄入界面時。首先對於利用書簽的模板方法,用戶在實際錄入數據的過程中,很容易將書簽誤刪除。插入特殊符號的方法無疑增加了用戶錄入時的負擔,且界面也不美觀,沒有保持文檔原貌。但這兩種方法的基本思路都一樣,即創造要提取要素的特征符號。
借鑒以上兩種模板設計方法的成功經驗,筆者提出的模版設計思路是:成果的所有要素分門別類存儲在Word文檔的不同表格中,采用Word表格的具體要素—單元格作為文檔內容的識別依據,系統根據Word表格中單元格的索引進行提取。但是這種設計思路必須能處理兩種情況:一種是每個Word表格對應數據表中的一條記錄即單元格數固定的情況;另一種是一個Word表格對應數據表中多行記錄即單元格數可變的情況。現筆者開發的系統已完全能自如處理這兩種情況。
其次是成果文檔的導入。導入時,一般存在兩種情況:一是導入單個成果文檔,二是同時導入多個成果文檔即文件夾的方式。成果文檔的導入實際上是Word文檔內容的提取問題,提取的關鍵是成果文檔中圖片的提取以及成果詳細內容的提取,在該系統中圖片格式只能為BMP格式。對於成果詳細內容,由於內容中有可能包括文本框、表格、圖片等要素,因此采用了SQL Server中的Ntext類型字段。對於圖片和詳細內容的提取,都采用了剪貼板作為Word數據和數據表數據交換的媒介。導入時的另一個問題是單元格內容的判定,即如何判定當前單元格內容是數據表字段所需要的。
對於單元格數固定的表格,Word表格的單元格和數據表中的一條記錄中的字段是一一對應的,但對於單元格數可變的情況,必須增加單元格內容判定的功能。同時導入多個文檔時,存在要導入的文檔或文件夾中含有其它Word文檔的情況,因此必須對欲導入的文檔進行身份識別。對應前面的模板設計方法,一般的識別方法是識別書簽或者識別在文檔的某個位置加上的特殊字符。但是這兩種識別方法的缺陷也是顯而易見的,識別標志容易誤刪除。
但文檔識別的基本思路是利用文檔模板區別於其他文檔的特征加以識別。借鑒已有的識別方法的成功經驗,筆者提出的文檔識別方法是:從成果模板本身的特征出發,用三個限制條件進行判斷。一是成果文檔中共有三個表格,二是成果文檔的第一個表格共兩行,三是成果文檔的第三個表格共兩行。以上三個限制條件足以保證成果文檔的正確識別。當然不同的成果模板可以根據其具體特征進行具體分析,這是文檔識別的基本思路。
再次是成果文檔的導出。導出時,依然以Word中的單元格作為識別單位。導出時的最常見問題是,對於多記錄情況,Word表格應該能根據記錄數的多少自動調整行數,且進行單元格的合並和拆分。在筆者開發的系統中,該問題也已成功解決。另外,從用戶角度考慮,系統還實現了導出時將導出文檔合一的功能即將多個文檔導出為一個文檔,大大方便了用戶的浏覽和編輯。
為了充分發揮Delphi強大的數據管理功能,系統中同時提供了手工維護功能,即以傳統的系統界面進行成果的增刪改的功能,這樣保證了修改內容和導出成果文檔的一致性,同時又便於查詢和統計。
結論
Delphi+Word的數據處理方式,可以實現系統的脫機使用,符合系統分布式布署的思想,同時又便於用戶熟練掌握,符合系統集成的思想。這種全新的數據處理方式在筆者的系統中得到了較好的驗證和使用,為以後的數據庫系統開發提供了一條新的解決思路。采用Word作為數據錄入和輸出的前端工具的系統設計思路,同樣適用於其他語言的數據庫系統開發,尤其適用於大量的數據處理的數據庫系統。
Delphi擅長做數據庫系統的開發,其功能強大,開發快速。但現在大多數的數據庫系統80%的工作都是簡單的增刪改的工作,用數據庫系統來實現增刪改,存在錄入不方便,錄入內容簡單等問題,尤其對於處理大量的文本和圖片的數據庫系統來說更是非常不便。報表輸出還需要利用Delphi中各個版本提供的報表工具或第三方打印控件進行開發。雖然Delphi中提供的報表工具功能逐漸強大,使用愈加方便,但是如果想充分利用該報表工具開發強大實用的報表,仍得花費一定的精力去學習該報表組件的各個功能。例如Delphi6中提供的Qreport報表工具,對於制作復雜報表非常麻煩,也許BorLand也注意到了這個問題,所以到了Delphi7時,換成了Rave報表工具,該工具相比Qreport更易於使用,但如果要做出復雜的報表,仍需對它詳細研究。
在做文字處理的時候,中國的大多數用戶還是習慣於使用Office,而Office中最常用的莫過於Word。因此大多數用戶對於Word的操作應該說非常熟悉,而Word在數據錄入方面功能之強大確實是無與倫比,在Word中無論簡單的文本、表格還是圖片等都能很輕松的錄入,利用Word本身的打印功能還可以將其作為報表輸出的工具。
Delphi+Word的數據庫系統設計思路
結合Delphi和Word本身的特點,數據庫系統可以采用這樣的設計思路:以Word作為數據錄入界面,錄入完畢後,數據庫系統自動從Word中提取數據,並將提取的各要素存儲於數據表中,以便利用數據庫系統的強大的數據處理功能對數據表內容進行維護、檢索、統計等,並將Word作為報表輸出的工具。
Delphi中從Delphi5開始恰恰提供了與Word的接口—TwordApplication,利用該接口可以實現Word的打開、關閉、保存以及對文檔內容作相應的處理。采用以上的系統設計思想以及Delphi提供的與Word的數據接口,筆者開發了一套成果管理系統。該成果管理系統主要內容是管理最終成果文檔的內容,包括詳細內容、文字圖片、成果的儲備情況、經費情況、獲獎情況等,為了便於統計分析及保證成果內容的一致性,系統將各要素統一存放於數據表相應的字段中。下面詳細闡述系統的設計思路,參見圖1。