UML软件工程组织

 

文档管理方法的实现(2)

作者: 黎宇(摘自ZDNet China)
上一节中,我们介绍了文档管理软件的设计方法,在这一节里,我们将通过程序讲解部分功能的实现方法。
实现方法:

1.   先建立好上面的数据库,这里略。启动Visual Basic 6.0。在新建项目中选择标准EXE确定,则进入开发环境中,把工程名换名为FileManage。增加一个模块并命名为ModPublic,在模块中定义一些全局变量。代码如下:

Public objDB As _
  New ADOAccess

Public CurrNode As _
  MSComctlLib.Node   '树结点

Public nodX As Object          '在拖动的项

Public gUserName As String     '用户名

Public gUserId As String       '用户号

Public gShareType As Integer   '共享类型

Public Type people           '自定义
  userId As String
  userName As String
End Type

Public yg() As people

说明:上面的ADOAccess是本人编写的一个组件,在计算机世界网的应用与方案栏中的《Visual Basic.NET中访问数据的方法 》一文可找到。是一个功能强大的数据访问组件,有关数据操作都封装在里面,仅需直接调用就可。 

2.   增加一个登录表单,命名为frmLogin,在上面放入控件二个标签,二个文本控件并命名为txtUser、txtID,一个按钮控件并命名为cmdLogin。如下图:

在其代码窗口中编号代码如下:

Private Sub Form_Load()
   objDB.ConnAccess (App.Path + "\test.mdb")
End Sub

Private Sub cmdLogin_Click()

  Dim strWhere As String

  Dim recTemp As ADODB.Recordset

  gUserName = txtUser.Text

  gUserId = txtID.Text

 'strWhere = "UserName='" & txtUser.Text & "' and userid='" & txtID.Text & "'"

  If gUserName = "" Then
     MsgBox "请输入用户!", vbExclamation + vbOKOnly, "错误"
     Exit Sub
  End If

  If gUserId = "" Then
     MsgBox "请输入用户密码!", vbExclamation + vbOKOnly, "错误"
Exit Sub 
  End If

 strWhere = "UserName='" & gUserName & "' and passwd='" & gUserId & "'"

 Set recTemp = objDB.OpenTable("yg_tab", strWhere)

   If Not recTemp.EOF Then
      gUserId = recTemp!userId
      frmBrowse.Show
   Else
      MsgBox "非法的用户,请重新登录!", vbExclamation + vbOKOnly, "错误"
      txtUser.Text = ""
      txtID.Text = ""
      Exit Sub
   End If
End Sub

说明:上面的代码在表单的Load事件中连接数据库test.mdb,在登录按钮的单击事件中先取得用户名和密码,然后进行验证,确定后则进入下一表单,否则提示出错信息。3.   增加一个浏览表单,命名为frmBrowse,在上面放入二个选择控件其标题分别为浏览、查询文件,一个树控件、一个列表控件,一个公共对话盒控件,一个文本控件并命名为txtPath, 一个图片控件并命名为TreeImageList。7个按钮控件并分别命名为cmdDelFile、cmdDelDir、cmdShareFile、cmdShareDir、cmdCreateFile、cmdCreateDir、cmdSave,标题分别为删除文件、删除目录、共享文件、共享目录、创建文件、创建目录、文件上载。布置如下图:

定义二个局部变量

Dim indrag As Boolean 
Dim tNode As Node

单击表单,在表单的Load事件中编写图片控件的图片资源,并把列表控件设置为报表类型。代码如下:

Private Sub Form_Load()

With Me.TreeImageList.ListImages 
        .Clear
        .Add , "Drive", LoadResPicture("Drive", vbResBitmap)
        .Add 2, "Close", LoadResPicture("CLSDFOLD", vbResBitmap)
        .Add , "Open", LoadResPicture("OPENFOLD", vbResBitmap)
        .Add , "Doc", LoadResPicture("WINDOC", vbResBitmap)
        .Add , "Bmp", LoadResPicture("BMP", vbResBitmap)
End With 
ListView1.View = lvwReport

  End Sub

编写一个建立树结点的过程,这里怎样建立树结点不再着作介绍,请参考其它资料。代码如下:

Public Sub CreateTree(ByVal strType As String)

    Dim recTemp As New ADODB.Recordset

Dim strWhere As String 
Dim parFlag  As String    '父结点的标记。

    Dim sonFlag As String     '子结点的标记。

    Const TOPIMAGE = 1, FIRSTIMAGE = 1, TWOIMAGE = 1, _
  THREEIMAGE = 1, FOURIMAGE = 1

    TreeView1.Visible = True

    Dim strNodeText As String           '树结点的名字。

    Dim flatNodeNum As Integer           '当前层树结点数。

Dim i As Integer, j As Integer, k As Integer 
    TreeView1.Nodes.Clear

    parFlag = "K00"

    strNodeText = "文件目录列表" + strType

    Set tNode = TreeView1.Nodes.Add(, tvwChild, parFlag, _
 strNodeText, "Drive") '生成顶结点

    tNode.Expanded = True

     ''''''''生成第一层结点

   strWhere = "sub_id=0 order by id"

   Set recTemp = objDB.OpenTable("doc_path", strWhere)

   With recTemp

        For i = 0 To .RecordCount - 1

           strNodeText = Trim(recTemp(1))

           sonFlag = "K" + CStr(recTemp!Id)

          ' sonFlag = CStr(recTemp!Id)

           Set tNode = TreeView1.Nodes.Add(parFlag, tvwChild, _
         sonFlag, strNodeText, "Close") '生成第一层结点

           tNode.Tag = "node"

           .MoveNext

         Next 
    End With

     ''''''''生成第2层结点

   strWhere = "sub_id<>0 order by id"

   Set recTemp = objDB.OpenTable("doc_path", strWhere)

   With recTemp

        For i = 0 To .RecordCount - 1

           strNodeText = Trim(recTemp(1))

           parFlag = "K" + CStr(recTemp!sub_id)

           sonFlag = "K" + CStr(recTemp!Id)

          ' sonFlag = CStr(recTemp!Id)

          Set tNode = TreeView1.Nodes.Add(parFlag, _
tvwChild, sonFlag, strNodeText, "Close")
         tNode.Tag = "node"

           .MoveNext

         Next

   End With

 End Sub

编写浏览单选事件,单击浏览控件,在其单击事件中编写调用建立树的语句。代码如下:

Private Sub Option1_Click()
   Call CreateTree("")
End Sub

在下一部分中,我们继续给出实现文件查找及浏览功能的代码。

 

 


版权所有:UML软件工程组织