ADO記錄集和水晶報表

2021-04-17 08:54:43 字數 3171 閱讀 1769

在使用水晶報表時,經常會感到資料不是很好控制,最後只好使用這個終極絕招咯。那就是使用資料定義檔案(ttx),把得到的ado

記錄集傳送給水晶報表。

通常情況下,水晶報表是從物理的資料庫上建立出來的,但是現在有了32位的active data driver-- p2**on.dll,水晶就可以不用再事先連線到乙個資料庫上咯。

首先,需要建立乙個ttx檔案,進入資料來源選擇窗體後,如下圖選中

再單擊了前面的「+」後彈出資料來源窗體

此時,我們使用「new」按鈕建立乙個新的資料定義檔案(ttx),格式如下

儲存後,我們開啟這個文字檔案,就會發現ttx檔案的格式,原來中間是tab分割符來的。

接著,我們就按照水晶報表的老套路畫式樣,剩下的就是傳遞記錄機集了。

下面,我們要宣告好傳遞ado

記錄集需要的api,

public declare function peopenengine lib "crpe32.dll" () as integer

public declare function pegeterrorcode lib "crpe32.dll" (byval printjob as integer) as integer

public declare function peopenprintjob lib "crpe32.dll" (byval rptname as string) as integer

public declare function peoutputtowindow lib "crpe32.dll" ( _

byval printjob as integer, _

byval title as string, _

byval left as long, _

byval top as long, _

byval width as long, _

byval height as long, _

byval style as long, _

byval pwindow as long) as integer

public declare function peoutputtoprinter lib "crpe32.dll" ( _

byval printjob as integer, _

byval ncopies as integer) as integer

public declare function pestartprintjob lib "crpe32.dll" ( _

byval printjob as integer, _

byval waitornot as integer) as integer

public declare function pecloseprintjob lib "crpe32.dll" (byval printjob as integer) as integer

public declare sub pecloseengine lib "crpe32.dll" ()

public declare function createfielddeffile lib "p2**on.dll" ( _

lpunk as object, byval _

filename as string, _

byval boverwriteexistingfile as long) as long

public declare function vbencodelptr lib "p2**on.dll" (x as object) as string

public declare function setactivedatasource lib "p2**on.dll" ( _

byval printjob as integer, _

byval tablenum as integer, _

x as object) as long

最後給出的是報表的列印**

dim job as integer

dim handle as integer

'開啟列印引擎

handle = peopenengine

'水晶的錯誤處理

if handle = 0 then

errornum = pegeterrorcode(handle)

msgbox "列印引擎出錯!"

msgbox "錯誤代號:" & errornum

end if

'開啟列印作業

'水晶的錯誤處理

if job = 0 then

errornum = pegeterrorcode(job)

msgbox "開啟作業new.rpt 失敗!"

msgbox "錯誤代號:" & errornum

end if

'給水晶報表傳送ado

記錄集,adorecordset的生成就不再多說了

handle = setactivedatasource(job, 0, adors)

'輸出到列印預覽視窗

handle = peoutputtowindow(job, "new.rpt", 0, 0, 520, 520, ws_maximize, 0)

『直接輸出到印表機

handle = peoutputtoprinter(job,1)

'水晶的錯誤處理

if handle <> 0 then

handle = pestartprintjob(job, true)

if handle <> 0 then

msgbox "列印完畢"

else

errornum = pegeterrorcode(job)

msgbox "列印失敗!"

msgbox "錯誤代號:" & errornum

end if

else

errornum = pegeterrorcode(job)

msgbox "無法輸出到窗體或印表機"

msgbox "錯誤代號:" & errornum

end if

'關閉列印作業

pecloseprintjob (job)

'關閉列印引擎

pecloseengine

我使用的是vb6+水晶報表

8.5,感覺這種方式比較靈活好用,同時解決了水晶報表補空行的問題。

水晶報表使用學習記錄(一)

這個星期由於專案的需求,沒辦法,只能決定乾掉crystal report 水晶報表 這個東東了。首先需要明白兩個概念 pull 拉 和push 推 這是兩個不同的模式。前者是直接通過和資料庫進行連線,獲取資料,產生報表。當然優點是不需要寫任何 確實有些不錯的地方。但是,缺點就是很難做擴充套件,比如有...

水晶報表和excel 區別

1.以前用excel的控制項做報表。報表的格式可以由使用者自己製作,比如報表的標題 每行每列的內容等。感覺還是很方便的。缺點是電腦裡必須裝excel。2.以前用excel的控制項做報表。比如報表的標題 每行每列的內容等。感覺還是很方便的。缺點是電腦裡必須裝excel。報表的格式可以由使用者自己製作,...

VS水晶報表公升級問題記錄

原vs2008程式,換vs2013。安裝完畢後開啟原vs2008程式,水晶報表自動公升級,後出現一系列問題。問題解決方案 參考資料 錯誤不能以宣告的方式設定 displaygrouptree 屬性。刪除displaygrouptree false cs頁面新增crystalreportviewer1...