在开发设计SQL Server数据库软件过程中,经常会遇到数据库对表查询时要求含有Image字段图片信息与数据信息一同显示情况,以达到“图文并茂”的效果,并随时输出打印;这也是目前应用软件开发一种新趋势与新潮流。现今多数行业开发设计应用系统都具备这一特点;如:社保、医保、身份证、学生学籍等管理系统。为了让朋友们对这一开发方法和实现过程有所了解,本人将在开发[汽车零部件管理系统]中,针对[汽车零部件卡片信息浏览与打印]界面为例,对实现[SQL Server含Image字段的数据表浏览与打印]方法进行介绍。[软件环境:VB6.0、SQL Server2000和Crystal Report9.0]
如图1为:汽车零部件卡片信息窗体界面 下面分四个方面介绍如下:①. 图片在窗体上的显示,采取表+实体的方法,即图像数据以文件形式存放于指定的计算机目录下,在数据库表中只反映图片数据文件的存储路径,使图片在窗体上显示。
②. 对打印卡片中图片,采取直接将Image图片字段名为Picture的内容调入到CrystalReport9.0的水晶报表的设计器中得以实现。
③. 在数据装入MSFlexgid控件过程中,本人加了对[网格列单元背景颜色的设置],凡为单数“列”背景颜色均置为“浅绿”。注:列的下标是由0……N.
④. 放大图片显示,采取调用另一个窗体来完成。只要[双击图片控件]即可完成此操作。
⑤. 卡片打印设计,按照Crystal Report9.0设计器“信签”方式进行了布局;具体步骤本文后面将做介绍,这里不多赘述。
①.模块变量定义
Option Explicit
Dim mConn As ADODB.Connection ''连接
Dim rstByQuery As ADODB.Recordset ''结果集
Dim sSQL1 As String ''定义字符串
Public Tu_name As String ''图片字符串[全局变量]
②.装入零件数据
Sub xs_Call() ''在按钮中的代码:
On Error Resume Next
Dim i As Integer
Dim J As Integer
Dim P As Integer
clea_xy ''刷新网格信息
Set rstByQuery = New ADODB.Recordset
Set rstByQuery = New Recordset
rstByQuery.Open "Select * From SQR7160 ", mConn, adOpenStatic, adLockOptimistic
i = 0
Do While Not rstByQuery.EOF
i = i + 1 '' I 中保存记录个数
rstByQuery.MoveNext
Loop
MSFlexGrid1.Rows = i + 1 , ''动态设置MSFlexGrid的行和列
MSFlexGrid1.Cols = rstByQuery.Fields.Count + 1
MSFlexGrid1.Row = 0
For i = 0 To rstByQuery.Fields.Count - 1
MSFlexGrid1.Col = i
MSFlexGrid1.Text = rstByQuery.Fields.Item(i).Name
If rstByQuery.Fields(i).DefinedSize < 40 Then
MSFlexGrid1.ColWidth(i) = 1200
Else
MSFlexGrid1.ColWidth(i) = 2200
End If
Next ''设置第一行的标题,用字段名填充
rstByQuery.Close ''''''
i = 0
rstByQuery.Open "Select * From SQR7160 ", mConn, adOpenStatic, adLockOptimistic
Do While Not rstByQuery.EOF
i = i + 1
MSFlexGrid1.Row = i ''确定显示数据行
P = 1 ''单数位背景置色=1/双数位背景置色=0
For J = 0 To rstByQuery.Fields.Count - 1
MSFlexGrid1.Col = J
MSFlexGrid1.Text = rstByQuery(J) ''填充所有列数据
If J = P And J <= rstByQuery.Fields.Count - 1 Then ''
MSFlexGrid1.Col = P
MSFlexGrid1.CellBackColor = &HC0FFC0 ''浅绿色背景
P = P + 2
End If
Next
rstByQuery.MoveNext
Loop ''这个循环用来填充MSFlexGrid的内容
rstByQuery.Close ''''''
Text1.Text = ""
Text1.Text = CStr(i)
End Sub
③.点击MSFlexgrid网格控件有效行的代码Private Sub MSFlexGrid1_Click() ''浏览网格数据的全部代码 On Error Resume Next Txt_path.Text = "" ZP.Visible = True MSFlexGrid1.Col = 0: Txt_NO.Text = MSFlexGrid1.Text '' 编号 …… ‘部分代码类同的略去! MSFlexGrid1.Col = 10: Txt_LSJ.Text = Format(MSFlexGrid1.Text, "#0.#0") ''零售价 If Txt_path.Text <> "" Then ‘存放图片的目录路径及图片文件名 Tu_name = Trim$(Txt_path.Text) If Dir(Tu_name) = "" Then MsgBox "照片文件输入错误!!", 32, "错误提示”" Exit Sub End If ZP.Picture = LoadPicture(Tu_name) ''装入图片并显示到窗体指定处 End IfEnd Sub④.【打印卡片】按钮的代码Private Sub Command2_Click()Dim sSQL1 As StringDim rq1, rq2 As VariantDim MY_N1, MY_N2 As StringMY_N1 = "[天津市津东方汽配中心]"MY_N2 = "零部件-业务卡片"rq1 = "2005-01-01"rq2 = "2005-12-30"rq = "建卡区间:" & rq1 & " 至 " & rq2sSQL1 = "Update bt_00 Set dd_bt=''" & MY_N1 & "'',dd_bt01=''" & MY_N2 & "'',,DT1=''" & rq & "''"mConn.Execute sSQL1 ’定义打印卡片表头信息mConn.Execute "Delete From sqr_prt"mConn.Execute " Insert SQR_prt Select * From SQR7160 Where 编号=''" & Txt_NO.Text & "''"MY_WT = "111" ‘定义打印文件编号XP_PRT.Show ‘调用打印窗体Command2.Enabled = TrueEnd Sub