Job = PEOpenPrintJob(App.Path & "\New.rpt") '水晶的错误处理
4 j8 q6 ? L3 P If Job = 0 Then/ {0 l5 f" ]3 Y0 p0 [6 n
ErrorNum = PEGetErrorCode(Job)- C, }. M5 N0 } H2 T
MsgBox "打开作业New.rpt 失败!"4 S; o) [0 { ~) W( `( |( i
MsgBox "错误代号:" & ErrorNum
" {1 f* W! D: P' ^8 Q End If
" ^; O2 J+ ^7 v$ k, u. B" S3 L: Q; } '给水晶报表传送ADO记录集,AdoRecordset的生成就不再多说了
" a% N6 k$ X* T4 [; N# O/ h* K: N, S Handle = SetActiveDataSource(Job, 0, ADOrs)* {0 d2 `' N4 f0 z, u! |
'输出到打印预览窗口
- V; ?' ^7 \* v7 O Handle = PEOutputToWindow(Job, "New.rpt", 0, 0, 520, 520, WS_MAXIMIZE, 0)2 P- d7 G$ H: o0 X! f" l
‘直接输出到打印机 z1 P2 H; X4 J- w$ K! ?" {6 T# ]
Handle = PEOutputToPrinter(Job,1)
4 f5 y* X z. G1 S+ F5 r! ~ '水晶的错误处理
! }+ J+ R, N) Z; s/ _8 G) u8 @) w If Handle 0 Then
2 w* v; A+ {( i2 D% q- m! l& S0 \ Handle = PEStartPrintJob(Job, True)
+ S: q! S; Y9 C2 Z If Handle 0 Then2 f2 }4 b5 K2 a8 R9 U5 c/ V# c$ ^
MsgBox "打印完毕"
* Y3 M) d& Q5 [' x2 J7 \ Else
7 h+ }1 ~7 a3 ?% v$ _ ErrorNum = PEGetErrorCode(Job)* I2 q$ h0 k) X+ o; ^
MsgBox "打印失败!"
6 U( o" n1 ~8 w6 d+ p( e MsgBox "错误代号:" & ErrorNum
) I8 Y5 \* Q* ^; v. i8 Z3 ` End If( |) r0 C/ _, Q( Q2 f9 j* ?
Else! Q8 K/ W8 }; y o. \
ErrorNum = PEGetErrorCode(Job), U/ }3 i: i a0 D6 k% D, L" ?
MsgBox "无法输出到窗体或打印机"' j1 z2 k7 B' J" t& B5 ^
MsgBox "错误代号:" & ErrorNum) r2 H( I- n5 J5 U" F
End If: t) I1 n; @+ n, I/ l9 N: h
'关闭打印作业7 A2 Y. f J4 Q& u& n! t
PEClosePrintJob (Job)
' K) D; \( ~8 f '关闭打印引擎9 Y4 G, @. x; B: e9 z; A$ V; V
PECloseEngine) u, S" J; r- V5 @4 Z \$ ?
我使用的是VB6+水晶报表8.5,感觉这种方式比较灵活好用,同时解决了水晶报表补空行的问题。 |