二进制列的多文件管理

本节的内容可以参考CaseStudy目录下的示例文件:多文件二进制列.Table
该示例文件使用了一个Access文件作为外部数据源,文件名为:多文件二进制列.mdb

该示例演示了通过二进制列来设计一个多文件管理器:

这个文件管理器和Foxtable内置的文件管理器是相似的。

实际上二进制列只能插入一个文件,并没有办法插入多个文件。
当需要管理多个文件时,我们只能使用关联表,新建一个专门用于插入文件的表,作为子表,和原来的表建立关联。

设计过程:

1、删除员工表中原来用于插入文件的附件列。

2、新建一个表,名为“附件”,包括编号(整数型)、附件(二进制型)、文件名(字符型)、CRC值(字符型)等列,当然_Identify列是必须有的:

3、将这个附件表作为外部表添加到Foxtable中,添加的时候,请排除附件和CRC值这两列:

4、员工表和附件表建立关联,员工表作为父表,关联列为"_Identify",附件表作为子表,关联列为"编号":

5、设计一个下图所示的窗口:

6、窗口中的Table控件绑定到关联表"员工.附件",允许编辑设置为False,显示行号设置为False, 网格线宽度设置为0,整行突出设置为True,显示列设置为"文件名|100"。

7、窗口的AfterLoad事件代码设置为:

Tables("员工.附件").ExtendLastCol = True '水平方向自动填满
Tables
("员工.附件").SetHeaderRowHeight(0,-1) '隐藏列标题
DataTables
("附件").SysStyles("EmptyArea").BackColor = Color.White '空白区的背景设置为白色

这样Table控件的外观就和ListBox(列表框)控件看起来是一样的。

8、窗口各按钮的代码:

按钮 代码
增加

Dim dlg As New OpenFileDialog
dlg
.Filter = "图形文件|*.bmp;*.jpg;*.gif;*.png"
If dlg.ShowDialog =DialogResult.OK Then
    Dim fl As String = dlg.FileName
    Dim r As Row = Tables("员工.附件").AddNew()
    r("文件名") = FileSys.GetName(fl) '写入文件名
    r.Save '必须先保存
    r.DataRow.SQLInsertFile("附件",fl) '插入文件
    r.DataRow.SQLSetValue("CRC值", CRCCheckFile(fl)) '保存crc检验值
End
If

删除

Dim r As Row = Tables("员工.附件").Current
If r IsNot Nothing Then
    r.Delete
End
If

清除

For Each dr As DataRow In Tables("员工").Current.DataRow.GetChildRows("附件")
    dr.Delete()
Next

打开

If Tables("员工.附件").Current Is Nothing Then
    Return
End
If
Dim
dr As DataRow = Tables("员工.附件").Current.DataRow
Dim fl As StringProjectPath &  dr("文件名")
If FileSys.FileExists(fl) AndAlso CRCCheckFile(fl) = dr.SQLGetValue("CRC值") Then '如果本地存在同名文件且CRC校验值相同
    '则直接使用本地文件
Else '否则从数据库提取文件
    If dr.SQLLoadFile("附件",fl) = False Then '如果提取文件失败
        Messagebox.Show("附件提取失败,可能并不存在附件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Return
    End If
End
If
Dim
Proc As New Process '打开文件
Proc.File = fl
Proc
.Start()

9、最后将附件表的DoubleClick事件代码设置为:

If Forms("窗口1").Opened() Then '如果文件管理窗口已经打开
    If e.Table.name = "员工.附件" '如果双击的是关联表
       
Dim btn As WinForm.ButtonForms("窗口1").Controls("Button4")
       
btn.PerformClick() '模拟单击打开文件按钮
    End If
End
If

这样在Table控件中双击某文件,就会模拟单击打开按钮,从而打开所双击的文件。


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