最近笔者接到一个任务,要将学生的证书信息及相片打印到3+1技能证书模板上,并且还要传到网上供用人单位查询。原始数据分两部分,一部分是包含学生姓名、身份证号、认证项目、证书编号等信息的Excel表;另一部分是按认证项目分类、以学生姓名为名的相片,图片大小均为90×120像素,图片格式均为JPG。
; }; u4 n- Q3 N. W" j 考虑到时间上的紧迫性,还有用户操作的易用性,以后上网查询所需数据库的兼容性,因此决定选用Access来开发。Access具有强大的窗体创建、报表打印、VBA编程功能,足以胜任大部分小型数据库应用系统的开发。1 [% _) J( v" c/ \4 `/ c' U+ j1 q B# o
创建数据库和表
: L! ^" a' V5 I; L3 e 1. 打开Microsoft Office Access,创建一个空数据库,与相片的分类目录放在同一个文件夹下。5 J- S- a+ H5 z! L2 a9 R& z
2. 使用“文件→获取外部数据→导入”功能将Excel表直接导入Access中,保存为“证书信息”表。
4 c( [3 Q, _9 d n0 F5 b 创建证书信息报表
- }4 g y* F: C5 m* S: W 1. 创建“证书信息”报表,先插入一个“图像”控件,设置其图片属性为证书模板图片,设置其大小为证书模板的大小,设置其可见性为否,这样有利于证书信息的排版,且不会打印出来;再依次插入要打印的字段列表,设置好字体和字号;最后再插入一个“图像”控件,放置于打印相片的地方,设置其大小为相片的大小,设置其名称为“stuimg”。
: }! v% C7 { h 2. 依次点击菜单栏“视图→代码”命令,进入VBA代码编写窗口,编写如下代码:
* S1 |# n$ s$ `2 t2 c) L Private Sub 主体_Format(Cancel As Integer, FormatCount As Integer)
% d% w. E |; D# r: I& B# [ Dim imgpath As String
6 Q) K0 i, H# `+ t: S, R w ' 依据应用程序路径、认证项目名称、姓名得到相片路径
9 b: O' U- b" ?: A1 ` imgpath = Application.CurrentProject.Path +"\" +认证项目.text +"\"+ 姓名.Text+".jpg"4 M; k, {* ]- G) y* ?& k" C
' 判断照片是否存在,如果不存在则显示一张空白的图片。
7 w5 m8 f- J. t8 F# Q9 r7 ] If Dir(imgpath) = "" Then imgpath = Application.CurrentProject.Path + "\noimg.bmp"
, W& R; X4 x% O5 W3 o4 a Stuimg.Picture = imgpath# b% g' ?5 X/ l) C( q0 c: b
End Sub
1 E" g2 g2 e$ ~, }6 N+ } 创建打印预览面板窗体) h0 r* a2 ~# l4 i
1. 创建“打印预览面板”,依次放置一个用于查询的文本框,并命名为“inputname”;两个命令按钮“预览”、“关闭”。
# B9 x4 Z) ]* O, G: k 2. 依次点击菜单栏“视图→代码”命令,进入VBA代码编写窗口,编写如下代码:( T% Q+ Q$ F9 c+ a! w/ _
Public stuname As String '定义全局变量stuname, c6 L" a7 B" T7 e) R, V) l
Sub PrintReports(PrintMode As Integer): F7 P" J' }; x+ L/ D2 r
' 创建打印预览子程序
) S; K4 A2 G c! K/ o0 ~7 s Dim strWhereCategory As String
. X) _, ]- c/ r( {# { If stuname Empty Then2 q! T. F. U. P5 A# U: D
strWhereCategory = "姓名= '" + stuname + "'"7 k/ a" S3 r5 T# D3 N
End If6 K. J& y6 u* J
DoCmd.OpenReport "证书信息", PrintMode, , strWhereCategory
, m# K' I! B. e% |, ~ DoCmd.Close acForm, "打印预览面板"
! X# \: c, t' A1 z9 } End Sub$ A7 p% I* t& T% B8 u/ i* G
Private Sub inputname_Change()
p+ [+ B; G6 ~* s3 D G; Q ' 将文本框输入的字符赋给全局变量sname,用于给打印预览限定条件
7 H+ O: X" [+ c4 M' C stuname = inputname.Text; g. K, o, v6 U" O5 l; S
End Sub d8 y8 h# U9 F& h/ d0 h9 K; j
Private Sub 预览_Click()
8 b9 M9 R' ?# ^9 [* H7 e) X+ X# b ' 预览报表,本过程使用自定义的 PrintReports 子程序
5 n% r5 X! D' ~% {9 `: V/ z PrintReports acPreview
9 O$ U( L9 w1 E End Sub
4 g: m& V0 [6 x% w9 ? Private Sub 关闭_Click()
; Q( h- q' X: D9 g, [+ c/ b- B }0 s ' 关闭窗体
( b- p& | V4 I3 k DoCmd.Close+ Y- ^" x- @' \( ? R& a2 @* X8 D+ a
End Sub
4 y" i, h6 G4 A4 C6 @ 创建主切换面板窗体
$ B+ c6 I4 }7 g, b; @, r 1. 创建“主切换面板”,放置三个命令按钮“打印学生证书”、“返回数据窗口”、“退出管理系统”。+ C. R& ]9 E4 v$ e) g
2. 依次点击菜单栏“视图→代码”命令,进入VBA代码编写窗口,编写如下代码:
9 D# u* x) v8 K: w1 I9 X Private Sub 打印学生证书_Click()
+ e0 k, Q5 u. L Dim strFormName As String5 ?. R9 u1 \$ f/ @0 y" E, F
strFormName="打印预览面板"
, w! o; D' K& W1 q3 c G4 w ' 打开打印预览面板
5 [" z7 T v r; o2 y$ ? DoCmd.OpenForm strFormName, , , , , acDialog
' G1 K$ E! O3 n: \2 H, F End Sub
^' t% B8 g: M: K4 D Private Sub 关闭当前窗口_Click()
* T y3 s. \1 r4 C2 c Dim strDocName As String! Y# t/ i8 Z& f3 ~5 p! X! F
strDocName = "证书信息"
7 ]9 G( G5 P3 u$ `, P ' 关闭“主切换面板”窗体。$ H4 D2 \5 C' T
DoCmd.Close
2 B# j) ~/ n9 S ' 设置焦点到数据库窗口;选择“证书信息”表。
7 k: t0 n7 u3 C DoCmd.SelectObject acTable, strDocName, True
" n: J6 e6 d" V: A- q" |0 ^6 u/ O End Sub
% e( P3 {. P( V1 A. r' K. T, Q2 E Private Sub 退出管理系统_Click()4 t6 y7 t4 ]; Z0 e/ P: l; b& J
' 退出 Microsoft Access.9 e" {" k- t( i( F( ~5 ~
DoCmd.Quit3 F X! ?6 i/ ^2 i! Q1 _
End Sub2 h4 `3 ^: Y. j x; h7 G- l; [& f
设置启动时显示主切换面板
4 i) U4 N# C6 ~" X 依次点击菜单栏“工具→启动”命令,打开“启动”设置窗口,在“显示窗体→页”选项下选择主切换面板,并取消“显示数据库窗口”,这样在下一次打开此Access数据库时,就会自动显示主切换面板窗体。读者也可根据自己的需要决定是否取消菜单栏和快捷菜单栏,如果取消以后又要显示它们,可以在打开Access数据库时按住Shift键。) {. _( G% ~0 Y
至此,技能证书打印系统开发完毕。本系统在Windows 2000 Server SP4、Microsoft Office Access 2003下调试通过 |