⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmtl_backups.frm

📁 一个用VB写的财务软件源码
💻 FRM
📖 第 1 页 / 共 2 页
字号:
        If lstTable.Selected(i) = True Then
             aryTable() = Split(m_aryItem(i), "|")
             aryName() = Split(m_aryName(i), "|")
            For j = 0 To UBound(aryTable())
                sTable = aryTable()(j)
                sName = aryName()(j)
                If IsNumeric(Right(aryTable()(j), 4)) Then
                    If lstTable.List(i) Like "*凭证*" Then
                        iFlag = 2   '有年份的凭证项目
                    Else
                        iFlag = 1   '有年份的项目
                    End If
                Else
                        iFlag = 3       '无年份的辅助项目
                End If
                
                If iFlag = 2 Then
                    For k = 1 To lstMonth.ListItems.Count
                        sStr = "Select * from " & sTable
                        If lstMonth.ListItems(k).Checked Then
                            sMonth = lstMonth.ListItems(k).text
                            iCount = iCount + 1
                            sWhere = " where kjqj=" & k
                            sStr = sStr & sWhere
                            If ExistRecord(sTable, sStr, glo.cnnMain, bErr) Then
                                If HeadExport(sStr, sFilePath & "\" & glo.sOperateYear & "年_" & k & "月份凭证.txt", _
                                    iFlag, sTable, glo.cnnMain, lstMonth.ListItems(k).text) Then
                                    Call DataExport(sTable & "_" & k, glo.cnnMain, sFilePath & "\" & glo.sOperateYear & "年_" & k & "月份凭证.txt", sStr, sMonth)
                                End If
                            ElseIf Not bErr Then
                                Call ReadErr(sTable, sMonth)
                            End If
                        End If
                    Next k
                    
                    If iCount = 0 Then
                        If ExistRecord(sTable, sStr, glo.cnnMain, bErr) Then
                            If HeadExport(sStr, sFilePath & "\" & glo.sOperateYear & "年全年凭证.txt", iFlag, sTable, glo.cnnMain, glo.sOperateYear & "全年凭证") Then
                                Call DataExport(sTable, glo.cnnMain, sFilePath & "\" & glo.sOperateYear & "年全年凭证.txt", sStr, "全部凭证")
                            End If
                        ElseIf Not bErr Then
                            Call ReadErr(sTable, "全年凭证")
                        End If
                    End If
              Else
                    sStr = "Select * from " & aryTable()(j)
                    If HeadExport(sStr, sFilePath & "\" & sName & ".txt", iFlag, sTable, glo.cnnMain) Then
                        If ExistRecord(sTable, sStr, glo.cnnMain, bErr) Then
                             Call DataExport(sTable, glo.cnnMain, sFilePath & "\" & sName & ".txt", sStr)
                        ElseIf Not bErr Then
                             Call ReadErr(sTable)
                        End If
                    End If
              End If
               
            Next j
        End If
    Next i
lblMsg.Caption = "提示:数据备份结束。"
cmdPrevious2.Enabled = True
cmdCancel2.Enabled = True
End If

End Sub
Private Sub ReadErr(ByVal sTable As String, Optional ByVal sMonth As String)
    lstResult.ListItems.Add , , sTable & "表中" & sMonth & "没有相应的记录数据!"
    lstResult.Refresh
End Sub
'数据头导出,参数sFilePath为文件绝对路径
Private Function HeadExport(ByVal sSQL As String, ByVal sFilePath As String, ByVal iFlag As Integer, _
    ByVal sTable As String, ByVal Conn As ADODB.Connection, Optional ByVal sMonth As String) As Boolean
     Dim iFileNum As Integer
     Dim rSt As ADODB.Recordset
     Dim sFieldsName As String
     Dim iCount As Integer, j As Integer
     HeadExport = False
     Set rSt = New ADODB.Recordset
        rSt.CursorLocation = adUseClient
        On Error GoTo HandleErr
        rSt.Open sSQL, Conn, adOpenStatic, adLockReadOnly
        sFieldsName = ""
        iCount = rSt.Fields.Count - 1
    
        For j = 0 To iCount
            sFieldsName = sFieldsName & rSt.Fields(j).Name & vbTab
        Next j
        
        sFieldsName = Trim$(sFieldsName)
        rSt.Close
    '打开文件
     iFileNum = FreeFile()
     Open sFilePath For Output As #iFileNum

     '写入注释行
     Print #iFileNum, "[Memo]        备份人:  " & vbTab & glo.sUserName & vbTab & "备份时间:" & vbTab & _
         Format(Date, "yyyy年mm月dd日") & Space(2) & Format(Time, "hh时mm分ss秒")
     If (iFlag = 1) Or (iFlag = 2) Then
        Print #iFileNum, "[Year]        备份年份:" & vbTab & glo.sOperateYear
     End If
     If iFlag = 2 Then
         Print #iFileNum, "[Month]       备份月份:" & vbTab & sMonth
     End If
     Print #iFileNum, "[Table]       备份表名:" & vbTab & sTable
     Print #iFileNum, "TF: " & sTable & "(" & sFieldsName & ")"
     Close #iFileNum
     HeadExport = True
     Exit Function
HandleErr:
        HeadExport = False
        lstResult.ListItems.Add , , sTable & "表备份失败!"
        lstResult.Refresh
        Close #iFileNum
        Exit Function
End Function
 '数据备份
 '参数sSql为备份的条件语句, Conn为连接字符串,sFile为传入的文件绝对路径
 Private Sub DataExport(ByVal sTable As String, ByVal Conn As Connection, _
    ByVal sFilePath As String, ByVal sSQL As String, Optional ByVal sMonth As String)
        Dim i, j As Integer
        Dim strResult As String
        Dim rSt As ADODB.Recordset
        Dim iFileNum As Integer
        
        Set rSt = New ADODB.Recordset
        On Error GoTo HandleErr
        
       '打开文件
        iFileNum = FreeFile()
        Open sFilePath For Append As #iFileNum
        With rSt
            .CursorLocation = adUseClient
            .Open sSQL, Conn, adOpenStatic, adLockReadOnly
            strResult = ""
            i = 0
            While Not .EOF
                For j = 0 To .Fields.Count - 1
                    If IsNull(.Fields(j).Value) Then
                        strResult = strResult & "NULL" & vbTab
                    Else
                        Select Case .Fields(j).Type
                            Case adCurrency, adDouble, adBigInt, adDecimal, adInteger, _
                                adNumeric, adSingle, adSmallInt, adTinyInt, adUnsignedBigInt, _
                                adUnsignedInt, adUnsignedSmallInt, adUnsignedTinyInt, adVarNumeric
                                strResult = strResult & Trim(CStr(.Fields(j).Value)) & vbTab
                            Case adDate, adDBDate, adDBFileTime, adDBTime, adDBTimeStamp
                                strResult = strResult & "to_date('" & _
                                Format(.Fields(j).Value, "yyyy-mm-dd") & "','yyyy-mm-dd')" & vbTab
                            Case Else
                                strResult = strResult & "'" & Trim(CStr(.Fields(j).Value)) & "'" & vbTab
                        End Select
                    End If
                Next j
                
            '将数据写入文本文件中
                Print #iFileNum, Space(22) & strResult
                strResult = ""
                i = i + 1
                .MoveNext
            Wend
            .Close
       End With
       If sMonth <> "" Then
            lstResult.ListItems.Add , , Mid(sTable, 1, Len(sTable) - 2) & "表" & sMonth & "备份成功!"
       Else
            lstResult.ListItems.Add , , sTable & "表备份成功!"
       End If
        lstResult.Refresh
        '关闭文件
        Close #iFileNum
        Exit Sub
HandleErr:
    If sMonth <> "" Then
        lstResult.ListItems.Add , , Mid(sTable, 1, Len(sTable) - 2) & "表备份失败!"
    Else
        lstResult.ListItems.Add , , sTable & "表备份失败!"
    End If
    lstResult.Refresh
    Close #iFileNum
    Exit Sub
End Sub




Private Sub cmdOK_KeyUp(KeyCode As Integer, Shift As Integer)
cmdOk.Enabled = False
End Sub


Private Sub cmdPrevious2_Click()
lstResult.ListItems.Clear
lstResult.Refresh
lblMsg.Caption = "提示:正在备份数据,请等候......"
lblMsg.Visible = False
cmdOk.Enabled = True
sTb.Tab = 0
End Sub

Private Sub form_load()
Dim ItmX As ListItem
Dim i As Integer
    lstResult.View = lvwList
    lstResult.ListItems.Clear
    lstResult.Refresh
    Call FillTable
    With lstMonth
        .View = lvwList
        Set ItmX = .ListItems.Add(, , "1月份凭证")
        Set ItmX = .ListItems.Add(, , "2月份凭证")
        Set ItmX = .ListItems.Add(, , "3月份凭证")
        Set ItmX = .ListItems.Add(, , "4月份凭证")
        Set ItmX = .ListItems.Add(, , "5月份凭证")
        Set ItmX = .ListItems.Add(, , "6月份凭证")
        Set ItmX = .ListItems.Add(, , "7月份凭证")
        Set ItmX = .ListItems.Add(, , "8月份凭证")
        Set ItmX = .ListItems.Add(, , "9月份凭证")
        Set ItmX = .ListItems.Add(, , "10月份凭证")
        Set ItmX = .ListItems.Add(, , "11月份凭证")
        Set ItmX = .ListItems.Add(, , "12月份凭证")
    End With
    lblMsg.Caption = "提示:正在备份数据,请等候......"
    lblMsg.Visible = False

    lblMonth.Caption = "选择" & glo.sOperateYear & "年凭证月份"
    
    With lblMemo
        .AutoSize = True
        .WordWrap = True
        .Caption = " 注意:1.当选择备份凭证数据时,最" & vbCrLf & _
            "          好按月份备份,以免数据过" & vbCrLf & _
            "          大,速度很慢" & vbCrLf & vbCrLf & _
            "        2.当选择银行对账单的同时也" & _
            vbCrLf & "          备份银行对账启用日期表" & vbCrLf & vbCrLf & _
            "        3.当选择客户档案表的同时也" & vbCrLf & _
            "          备份客户档案分类表" & _
            vbCrLf & vbCrLf & "        4.当选择供应商档案的同时也" & vbCrLf & _
            "          备份供应商分类表,供应商" & vbCrLf & "          显示设置表"
    End With
    sTb.Tab = 0
    lstMonth.Enabled = False
    cmdAll.Enabled = False
End Sub
Private Sub FillTable()
    With lstTable
        .Clear
        .AddItem glo.sOperateYear & "年会计科目表"
        m_aryItem(.NewIndex) = "tZW_Km" & glo.sOperateYear
        m_aryName(.NewIndex) = glo.sOperateYear & "年会计科目表"
        
        .AddItem glo.sOperateYear & "年累计数据表"
        m_aryItem(.NewIndex) = "tZW_Balance" & glo.sOperateYear
        m_aryName(.NewIndex) = glo.sOperateYear & "年累计数据表"
        
        .AddItem glo.sOperateYear & "年凭证数据表"
        m_aryItem(.NewIndex) = "tZW_Pzsj" & glo.sOperateYear
        m_aryName(.NewIndex) = glo.sOperateYear & "年凭证数据表"
        
        .AddItem glo.sOperateYear & "年辅助核算表"
        m_aryItem(.NewIndex) = "tUSU_Fz" & glo.sOperateYear
        m_aryName(.NewIndex) = glo.sOperateYear & "年辅助核算表"
         
       
        .AddItem glo.sOperateYear & "年支票登记表"
        m_aryItem(.NewIndex) = "tZW_Check" & glo.sOperateYear
        m_aryName(.NewIndex) = glo.sOperateYear & "年支票登记表"
        
        .AddItem glo.sOperateYear & "年银行对账单"
        m_aryItem(.NewIndex) = "tZW_Yhdzd" & glo.sOperateYear & "|tZW_Yhdzqyrq"
        m_aryName(.NewIndex) = glo.sOperateYear & "年银行对账单|银行对账启用日期"
        
        .AddItem glo.sOperateYear & "客户档案表"
        m_aryItem(.NewIndex) = "tZW_Customer" & glo.sOperateYear & "|tZW_CustomerClass" & glo.sOperateYear
        m_aryName(.NewIndex) = glo.sOperateYear & "客户档案表|" & glo.sOperateYear & "客户分类表"
         
        .AddItem glo.sOperateYear & "项目档案表"
        m_aryItem(.NewIndex) = "tZW_Item" & glo.sOperateYear & "|tZW_ItemClass" & glo.sOperateYear
        m_aryName(.NewIndex) = glo.sOperateYear & "项目档案表|" & glo.sOperateYear & "项目分类表"
        
        .AddItem glo.sOperateYear & "供应商档案"
        m_aryItem(.NewIndex) = "tZW_Vendor" & glo.sOperateYear & "|tZW_VendorClass" & glo.sOperateYear & "|tZW_VendorShowSet" & glo.sOperateYear
        m_aryName(.NewIndex) = glo.sOperateYear & "供应商档案|" & glo.sOperateYear & "供应商分类|" & glo.sOperateYear & "供应商设置"
        
        .AddItem glo.sOperateYear & "部门维护表"
        m_aryItem(.NewIndex) = "tUSU_Department" & glo.sOperateYear
        m_aryName(.NewIndex) = glo.sOperateYear & "部门维护表"
        
        .AddItem "摘要维护表"
        m_aryItem(.NewIndex) = "tZW_Zywh"
        m_aryName(.NewIndex) = "摘要维护表"
    End With
End Sub


Private Sub lstMonth_ItemCheck(ByVal Item As MSComctlLib.ListItem)
Dim sMonth As String
Dim lMonth As Long
Dim bError As Boolean
Dim bExist As Boolean

sMonth = Mid(Item, 1, 2)
lMonth = 0
If IsNumeric(sMonth) Then
    lMonth = CLng(sMonth)
Else
    lMonth = CLng(Mid(sMonth, 1, 1))
End If
bExist = PzsjExistRecord(lMonth, glo.cnnMain, bError)
If Not bExist Then
    Item.Checked = False
    If Not bError Then
        MsgBox "该月份没有凭证数据!", vbInformation, "提示"
    End If
    Exit Sub
End If
End Sub

Private Sub lstTable_Click()
Dim i As Integer
    
    If lstTable.Selected(2) = True Then
        lstMonth.Enabled = True
        cmdAll.Enabled = True
    Else
        lstMonth.Enabled = False
        For i = 1 To lstMonth.ListItems.Count
            lstMonth.ListItems(i).Checked = False
            cmdAll.Enabled = False
        Next i
    End If
End Sub
'判断条件记录是否存在,若存在则函数本身返回True
Private Function ExistRecord(ByVal sTable As String, _
    ByVal sSQL As String, ByVal sConn As ADODB.Connection, _
    ByRef bErr As Boolean) As Boolean
Dim rSt As ADODB.Recordset

On Error GoTo HandleErr
Set rSt = New ADODB.Recordset
bErr = False
With rSt
    .CursorLocation = adUseClient
    .Open sSQL, sConn, adOpenStatic, adLockReadOnly
    If Not .EOF And Not .BOF Then
        ExistRecord = True
    Else
        ExistRecord = False
    End If
    .Close
End With
Exit Function
HandleErr:
    bErr = True
    lstResult.ListItems.Add , , sTable & "表备份失败!"
    lstResult.Refresh
    Exit Function
End Function

'判断条件记录是否存在,若存在则函数本身返回True
Private Function PzsjExistRecord(ByVal lMonth As Long, ByVal sConn As ADODB.Connection, ByRef bErr As Boolean) As Boolean
Dim rSt As New ADODB.Recordset
Dim iCount As Integer
On Error GoTo HandleErr
bErr = False
With rSt
    .CursorLocation = adUseClient
    .Open "Select count(*) iCount from tZW_Pzsj" & glo.sOperateYear & " where kjqj=" & lMonth, sConn, adOpenStatic, adLockReadOnly
    If .Fields("iCount").Value > 0 Then
        PzsjExistRecord = True
    Else
        PzsjExistRecord = False
    End If
    .Close
End With
Exit Function
HandleErr:
    bErr = True
    MsgBox Err.Number & vbTab & Err.Description & vbTab & Err.Source, vbInformation, "提示"
    Exit Function
End Function


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -