FastReport的一些總結

2021-04-13 04:56:02 字數 2098 閱讀 1929

1、問題:中文memo時常在執行時不能正確顯示。但用檔案載入後的memo沒有問題。

由於fastreport預設把報表檔案儲存在dfm裡面,我看了下dfm,fastreport的memo編碼是以utf8存的。估計還是字符集的問題。所以解決方法是:直接loadfromfile....

2、fastreport中變數的表達方式和注意問題。

在script裡面(至少pascal是這樣的),<>括起的內容可以是 dataset."fieldname",作為常量(沒試過賦值,不過應該不行的)使用。在memo裡面,用來表達需要變數的值。

另外需要注意的,我發現似乎<>裡面的引用最好只有一次,否則會報乙個莫名其妙的「***不存在」。應該是fastreport的智慧型感知機制的問題,所以一般如果需要用多次,可以用臨時變數賦值。

3、資料庫驅動的選擇

我面對的是資料庫是mysql,所以選的是dbx(dbexpress)。配置很簡單,就是發布時要注意一下,等會說。

3、主表和子表的關聯。

我本來是用masterfield的關聯方式(dbxtable),但是後來發現不知道是我**用錯了還是怎麼回事,每次執行程式第一次察看預覽的時候,都會報錯,說某關鍵字不能為空。後來我還是用了dbxquery,比較靈活一些。大部分情況不需要設定masterdataset,不過我有乙個查詢必須指定masterdataset才能使用。使用了類似於以下語法作為sql:

select fieldname1,fieldname2... from tablename where afield = :a1;

說明:1) 如果不把fieldname明確寫出來,在where子句存在的情況下,fastreport的資料感知不會告訴你這個查詢結果將由哪些字段組成的。

2)用引數來作為條件,在params裡面設定。注意型別。如果是varchar,要用vartostr函式轉換成string才可以比較。

4、pascal script裡面能夠使用comparetext做string的比較,但是,應該是由於編碼的問題,不能比較中文。千萬注意。

5、如果使用了subreport,似乎subreport那一頁的頁面設定必須和呼叫它的那一頁相同。換頁也不行。

6、繪製**。

繪製**在fastreport裡面看似有些麻煩(要自己畫),但是後來發現,真是靈活到了極點,極為好用。靜態**就不說了,動態的話,由於masterband是會自動重複的,所以只把masterband上放上線,前後放上header和footer,配合一下,產生的效果就是連續的,非常好用。

7、關於band。

我這次面對的東西有點點有趣:第一頁是乙個人的個人資訊,第二頁是這個人的一些資料統計(後來是由script生成的),第三頁是這個人的乙個相關報表(也是生成第二頁的依據)。說實話,我也是第一次做報表……所以有點摸不著頭腦。但是我檢視了fastreport的demo後,發現subreport似乎能夠很好滿足這種要求,在subreport裡加上header,然後把header的startnewpage設為true就可以很自然的分頁了。當然,先要把第二張和第三張位子換一下……雖然fastreport現在已經支援多層明細表,但是一方面我還是覺得subreport更加清晰,另一方面,我這裡紙張有嚴格要求,肯定不能擠到一張紙裡。在subreport裡面使用的也都是masterband(似乎是廢話……)。

8、script

其實啊,我最不喜歡碰的東西就包括報表。麻煩,繁瑣,沒有什麼技術含量,還經常進行介面微調,還有現在的報表軟體都不夠穩定,簡單的來說:不碰最好。不過這次雖然遇到了很多麻煩事,不過還算順利解決。

基本上,寫這個東西,大概花了兩天時間,當然,是全身心投入的兩天。我從完全對報表一無所知,到把這個搞定,感覺還是不錯的。呵呵。碰到的其他問題可以google一下。

還有個小問題:我最後才發現dbexpress是需要發行的……最後發行的方法如下(對於mysql而言):

把dbexpmysql.dll、dbxconnections.ini、dbxdrivers.ini和libmysql.dll放在主程式目錄,然後設定好兩個ini中的mysql伺服器位址,就搞定了……當初花了我兩個小時,直到抓狂,還是受大富翁乙個帖子的提醒才搞定……

'dbxconnections.ini');

同時,要保證sqlconnection1.loadparamsonconnect為false, 否則會覆蓋以上讀取的設定。

一些的總結

大學的教育模式是先教你原理,在教你怎麼用工具 而缺少樂趣,一般大牛 的思維模式都是這樣 先知道原理 在用工具 其實對於普通人來講,一般都是 知道原來還有這種利用方式?到 我要用工具來提高效率 廣用效率還不行 我要知道原理 誒好像現在工具滿足不了我的需要了,我要自己新增規則 新增的規則 以及滿足不了我...

BOM 的一些總結

一 window物件 1 window 物件是整個瀏覽器的核心,所有物件和集合都以某種方式回接到window物件。2 如果頁面使用的框架集合,每個框架都由他自己的window物件表示,存放在 frames 集合中,在這個集合中,可用數字 由0開始,從左到右,逐行的 或名字對框架進行索引。3 乙個更加...

IOCP的一些總結

1 在iocp中投遞wsasend返回wsa io pending的時候,表示非同步投遞已經成功,但是稍後傳送才會完成。這其中涉及到了三個緩衝區。網絡卡緩衝區,tcp ip層緩衝區,程式緩衝區。情況一 呼叫wsasend傳送正確的時候 即立即返回,且沒有錯誤 tcp ip將資料從程式緩衝區中拷貝到t...