使用二进制列的简单示例

本节的目的是完整地介绍如何使用二进制列来管理文件和图片。
本节的内容可以参考CaseStudy目录下的文件:二进制列.Table
该示例文件使用了一个Access文件作为外部数据源,文件名为:二进制列.mdb
这个文件有一个名为员工的表,这个表包括两个二进制列,分别为附件和照片,前者用于存储word文件,后者用于存储照片:
 

当然,二进制列可以存储任何格式的文件,本节只是一个示例而已。

设计步骤

1、首先设置好外部数据源,并记得在添加外部表的时候,排除所有的二进制列:

2、设计好窗口,窗口各个按钮的代码如下:

按钮名称 代码
打开文件

If Tables("员工").Current Is Nothing Then
   
Return

End
If
Dim
dr As DataRow = Tables("员工").Current.DataRow
Dim
fl As String ProjectPath &  dr("_Identify") & ".doc"
If
dr.SQLLoadFile("附件",fl) Then '如果提取文件成功
    Dim Proc As New Process '打开文件
    Proc.File = fl
    Proc.Start()

Else

    Messagebox.Show("附件提取失败,可能并不存在附件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)

End
If

插入文件

If Tables("员工").Current Is Nothing Then
    Return
End
If
Dim
dr As DataRow = Tables("员工").Current.DataRow
If dr.RowState = DataRowState.Added Then '如果是新增行,必须先保存才能插入文件
   
dr.Save()
End If
Dim
dlg As New OpenFileDialog
dlg
.Filter =
"Word
文件|*.doc"
If dlg.ShowDialog =DialogResult.OK Then
    dr.SQLInsertFile(
"
附件",dlg.FileName) '插入文件
End If

提示:请自行思考一下,为什么新增行必须先保存才能插入文件呢?

删除文件

If Tables("员工").Current IsNot Nothing Then
    Tables("员工").Current.DataRow.SQLSetValue("附件",Nothing) '从后台删除附件列内容

End
If

插入照片

If Tables("员工").Current Is Nothing Then
   
Return

End
If
Dim
dr As DataRow = Tables("员工").Current.DataRow
Dim
dlg As New OpenFileDialog
dlg
.Filter = "图形文件|*.bmp;*.jpg;*.gif;*.png"
If
dlg.ShowDialog = DialogResult.OK Then
    dr.SQLInsertFile("照片",dlg.FileName) '插入文件
   
Dim pic As WinForm.PictureBox = e.Form.Controls("PictureBox1")
    pic.Image = GetImage(dlg.FileName)

End
If

删除照片

If Tables("员工").Current IsNot Nothing Then
    Tables("员工").Current.DataRow.SQLSetValue("照片",Nothing) '从后台删除照片列内容
   
Dim pic As WinForm.PictureBox = e.Form.Controls("PictureBox1")
   
pic.Image = Nothing
End
If

3、将订单表的CurrentChanged事件代码设置为:

If Forms("窗口1").Opened Then '如果窗口已经打开
    Dim pbx As WinForm.PictureBox = Forms("窗口1").Controls("PictureBox1")
    If Tables("员工").Current Is Nothing Then
        pbx.Image = Nothing
    Else
        pbx.Image = Tables("员工").Current.DataRow.SQlLoadImage("照片") '从后台提取照片并显示
    End
If

End
If

这样在员工表中选择不同的行时,会自动从后台的照片列提取此员工的照片,并显示在窗口的PictureBox中

4、最后将窗口的AfterLoad事件代码设置为:

Tables("员工").RaiseCurrentChanged() '强行触发CurrentChanged事件

这样打开窗口后,PictureBox会自动显示当前员工的照片,否则需要换一次行才会显示。
当然你可以直接在这里编写代码来提取照片,但既然相关代码已经在表的CurrentChanged写好了,就没有必要重复编写了。

 


本页地址:http://www.foxtable.com/webhelp/topics/2954.htm