谢谢大家了

解决方案 »

  1.   

    这里有一段磁盘文件封装的类Option Explicit'储存文件名的类成员属性
    Private m_FileName As String'储存文件描述的类成员属性
    Private m_FileDesc As String'类初始化文件名的时候,说明和扩展名将设为N/A
    Private Sub Class_Initialize()m_FileName = "Uninitialized"
    m_FileDesc = "N/A"End Sub'类的公共方法,用于将文件复制到新位置
    Public Sub CopyFile(NewLocation)
        FileCopy m_FileName, NewLocation + ParseFile
    End Sub
    '类的公共方法,用于删除程序
    Public Sub DeleteFile()On Error GoTo Errorhandle
        Kill m_FileName
    Errorhandle:
        MsgBox vbCrLf & Err.Description
        Exit Sub
            
    End Sub
    '为文件描述得到和设置类成员属性
    Public Property Let FileDesc(s As String)
        m_FileDesc = s
    End PropertyPublic Property Get FileDesc() As String
        FileDesc = m_FileDesc
    End Property'根据现有信息获得纯粹的文件名
    '例如: c:\windows\clouds.bmp 的文件名是 clouds.bmp
    Public Property Get file() As String
        file = ParseFile()
    End Property'为类设置和得到文件名属性
    Public Property Let FileName(s As String)
        m_FileName = s
    End PropertyPublic Property Get FileName() As String
        FileName = m_FileName
    End Property'获得文件的长度
    Public Property Get FileSize() As Long
        FileSize = FileLen(m_FileName)
    End Property'获得文件扩展名
    Public Property Get FileExt() As String
        FileExt = parseext()
    End Property'获得文件目录
    Public Property Get Directory() As String
        Directory = ParseDir()
    End Property'获得文件日期
    Public Property Get FileDate() As Date
        FileDate = FileDateTime(m_FileName)
    End Property'解析出文件名信息
    Private Function ParseFile() As StringDim N As Integer
    ParseFile = ""
    For N = Len(m_FileName) To 1 Step -1
        If Mid(m_FileName, N, 1) = "\" Then
            ParseFile = Right(m_FileName, Len(m_FileName) - N)
            N = -1
        End If
    Next NEnd Function'解析出文件目录信息
    Private Function ParseDir() As StringDim N As Integer
    For N = Len(m_FileName) To 1 Step -1
        If Mid(m_FileName, N, 1) = "\" Then
            ParseDir = Left(m_FileName, N)
            N = -1
        End If
    Next NEnd Function'解析出文件扩展名
    Private Function parseext() As StringDim N As Integer
    parseext = "(N/A)"
    For N = Len(m_FileName) To 1 Step -1
        If Mid(m_FileName, N, 1) = "." Then
            parseext = Right(m_FileName, Len(m_FileName) - N)
            N = -1
        End If
    Next N
            
    End Function
      

  2.   

    调用,这里例子可以体现出了类的优点,如代码重用
    你可以继续封装
    Option Explicit'将我们的两个类声明为全局类
    Dim DF1 As DiskFile
    Dim DF2 As DiskFile
    Dim Dire As String
    Private Sub Copy_Click()'将文件复制至根目录
    Dire = InputBox("请输入想要保存文件的路径")
    DF1.CopyFile Dire
    End SubPrivate Sub DelFile_Click()'为被复制文件设置第二个类并删除文件
    Dim Fildel As String
    Fildel = Dire & DF1.file
    DF2.FileName = Fildel
    DF2.DeleteFileEnd Sub
    Private Sub OpenFile_Click()
    '创建两个新类
    Set DF1 = New DiskFile
    Set DF2 = New DiskFile
    ComDialog.Filter = "*.*"
    ComDialog.ShowOpen
    DF1.FileName = ComDialog.FileName'显示完整地文件名
    FileInfo(0).Text = DF1.FileName'仅显示文件名
    FileInfo(1).Text = DF1.file'显示文件扩展名
    FileInfo(2).Text = DF1.FileExt'显示文件目录
    FileInfo(3).Text = DF1.Directory'显示文件大小
    FileInfo(4).Text = DF1.FileSize'显示文件日期
    FileInfo(5).Text = DF1.FileDate'显示文件描述
    DF1.FileDesc = "这是一个" & DF1.FileExt & "类型的文件"
    FileInfo(6).Text = DF1.FileDescEnd Sub
      

  3.   

    对特定表的数据库访问的类.Option Explicit
    '
    'public Message of architecture type definition
    'Public req As Integer
    Public entry_dte As Long
    Public chg_dte As Long
    Public error_no  As Long
    Public error_msg As String
    '*** 1997/07/25 T.Nomura add START*******
    Public ferrno As Long
    Public terrno As Long
    Public employee_no As String
    '*** 1997/07/25 T.Nomura add END  *******Private Ds(1 To 103) As ObjectPrivate Field_1() As ObjectPrivate Field_101() As Object     'T.Nomura 1997/07/25
    Private Field_102() As Object     'T.Nomura 1997/07/25
    Private Field_103() As Object     'T.Nomura 1997/07/25Public Function DB_Del() As Long
    '*** 1997/07/25 T.Nomura add *******
        
        MyDBParaSet "error_no", error_no
        MyDBParaSet "employee_no", Trim(usr.user_id)
        MyDBParaSet3 "rtncd", 0
        
        sqlstr = "begin :rtncd := prmsg_delete("
        sqlstr = sqlstr & ":error_no,:employee_no); end;"
        DB_Del = MyDBSQL(sqlstr)
        If DB_Del = 0 Then
            DB_Del = MyParaGet("rtncd")
        End IfEnd FunctionPublic Function DB_Ins() As Long
    '*** 1997/07/25 T.Nomura add *******
        
        MyDBParaSet "error_no", error_no
        MyDBParaSet "error_msg", Trim(error_msg)
        MyDBParaSet "employee_no", Trim(usr.user_id)
        MyDBParaSet3 "rtncd", 0
        
        sqlstr = "begin :rtncd := prmsg_insert("
        sqlstr = sqlstr & ":error_no,:error_msg,:employee_no); end;"
        
        DB_Ins = MyDBSQL(sqlstr)
        If DB_Ins = 0 Then
            DB_Ins = MyParaGet("rtncd")
        End IfEnd Function
    Public Function DB_Upd() As Long
    '*** 1997/07/25 T.Nomura add *******
        
        MyDBParaSet "error_no", error_no
        MyDBParaSet "error_msg", Trim(error_msg)
        MyDBParaSet "employee_no", Trim(usr.user_id)
        MyDBParaSet3 "rtncd", 0
        
        sqlstr = "begin :rtncd := prmsg_update("
        sqlstr = sqlstr & ":error_no,:error_msg,:employee_no); end;"
        
        DB_Upd = MyDBSQL(sqlstr)
        If DB_Upd = 0 Then
            DB_Upd = MyParaGet("rtncd")
        End If
    End Function
    Public Function DB_Sel() As Integer
    '*********************************************************/
    '*                                                       */
    '*    Editing the Procedure and message data                         */
    '*      Parameter                                    */
    '*         @error_no  =  Error No.                             */
    '*         @req =  Request Code                       */
    '*                                                       */
    '*                      Specified Single data                   */
    '*                                                       */
    '*********************************************************/
        Dim rtn As Integer, i As Integer
    '
    '  req  Program_Id  Program_Name  Write     Update
    '     1                              96/11/20    Select Case req
        '***      Request Code= 1 Data extraction = Message Code   ***/
        '***                    Specified Single data               ***/
        Case 1
            MyDBParaSet "error_no", error_no
            sqlstr = "SELECT error_msg, entry_dte, chg_dte "
            sqlstr = sqlstr & "FROM  proc_msg_master "
            sqlstr = sqlstr & "WHERE error_no = :error_no"
            rtn = MyDBDyna(Ds(req), sqlstr)
            
            ReDim Field_1(Ds(req).Fields.Count - 1)
            For i = 0 To Ds(req).Fields.Count - 1
                Set Field_1(i) = Ds(req).Fields(i)
            Next
            
            If Rows <> 0 Then
                MyValRet error_msg, Field_1(0).Value
                MyValRet entry_dte, Field_1(1).Value
                MyValRet chg_dte, Field_1(2).Value
            End If    Case 102
    '1997/07/25 T.Nomura add start ***********************
    '*****************************************************
           MyDBParaSet "error_no", error_no
           MyDBParaSet3 "error_msg", ""
           MyDBParaSet "ferrno", ferrno
           MyDBParaSet "terrno", terrno
           
           sqlstr = "SELECT error_no,error_msg,entry_dte,chg_dte FROM proc_msg_master "
           If error_no <> 0 Then
              sqlstr = sqlstr & " WHERE " & error_no * 100 & " <= error_no "
              sqlstr = sqlstr & " and error_no <= " & error_no * 100 + 99 & " "
           Else
              sqlstr = sqlstr & " WHERE " & ferrno & " <= error_no "
              If terrno <> 0 Then
                 sqlstr = sqlstr & " and error_no <= " & terrno & " "
              End If
           End If
           sqlstr = sqlstr & " ORDER By error_no "
           
           rtn = MyDBDyna(Ds(102), sqlstr)
           
           ReDim Field_102(Ds(102).Fields.Count - 1)
           For i = 0 To Ds(102).Fields.Count - 1
              Set Field_102(i) = Ds(102).Fields(i)
           Next i
           
           If Rows <> 0 Then
              MyValRet error_no, Field_102(0).Value
              MyValRet error_msg, Field_102(1).Value
              MyValRet entry_dte, Field_102(2).Value
              MyValRet chg_dte, Field_102(3).Value
           End If
        
        Case 103
    '****
           MyDBParaSet3 "error_no", "0"
           MyDBParaSet "error_msg", Trim(error_msg)
           MyDBParaSet "ferrno", ferrno
           MyDBParaSet "terrno", terrno
           
           sqlstr = "SELECT error_no,error_msg,entry_dte,chg_dte FROM proc_msg_master "
           sqlstr = sqlstr & " WHERE error_msg like :error_msg "
           If ferrno <> 0 Then
              sqlstr = sqlstr & " and " & ferrno & " <= error_no "
           End If
           If terrno <> 0 Then
              sqlstr = sqlstr & " and error_no <= " & terrno & " "
           End If
           sqlstr = sqlstr & " ORDER By error_no "
           
           rtn = MyDBDyna(Ds(103), sqlstr)
           
           ReDim Field_103(Ds(103).Fields.Count - 1)
           For i = 0 To Ds(103).Fields.Count - 1
              Set Field_103(i) = Ds(103).Fields(i)
           Next i
           
           If Rows <> 0 Then
              MyValRet error_no, Field_103(0).Value
              MyValRet error_msg, Field_103(1).Value
              MyValRet entry_dte, Field_103(2).Value
              MyValRet chg_dte, Field_103(3).Value
           End If
        
        End Select
        
    '1997/07/25 T.Nomura add end *************************
        
        
        If rtn = -1403 Then rtn = NO_MORE_ROWS
        
        DB_Sel = rtnEnd FunctionPublic Function DB_Next() As Long
    Dim rtn As Long
    '1997/07/25 T.Nomura add start ***********************
    '***     req = 102
    '***     req = 103
    '*****************************************************    If req = 102 Then
           Ds(102).MoveNext
           If Ds(102).EOF <> True Then
              MyValRet error_no, Field_102(0).Value
              MyValRet error_msg, Field_102(1).Value
              MyValRet entry_dte, Field_102(2).Value
              MyValRet chg_dte, Field_102(3).Value
              rtn = 0
           Else
              rtn = NO_MORE_ROWS
           End If
        End If
        
    '******    If req = 103 Then
           Ds(103).MoveNext
           If Ds(103).EOF <> True Then
              MyValRet error_no, Field_103(0).Value
              MyValRet error_msg, Field_103(1).Value
              MyValRet entry_dte, Field_103(2).Value
              MyValRet chg_dte, Field_103(3).Value
              rtn = 0
           Else
              rtn = NO_MORE_ROWS
           End If
        End If
        
    '1997/07/22 T.Nomura add end *************************    DB_Next = rtnEnd Function