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

📄 frmtjrsfrm.frm

📁 vb源代码
💻 FRM
📖 第 1 页 / 共 4 页
字号:
    Dim j As Integer
    Dim ii As Integer
    Dim sRow As Integer
    Dim sCol As Integer
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Screen.MousePointer = 11
    
    
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = False
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Worksheets(1)
    '页面设置
    With xlApp.ActiveSheet.PageSetup
        .PrintTitleRows = "$1:$1"
        .PrintTitleColumns = ""
        .LeftHeader = ""
        .CenterHeader = ""
        .CenterFooter = "第 &P 页,共 &N 页"
        .RightFooter = ""
        .TopMargin = Application.InchesToPoints(0.708661417322835)
        .BottomMargin = Application.InchesToPoints(0.708661417322835)
        .HeaderMargin = Application.InchesToPoints(0.31496062992126)
        .FooterMargin = Application.InchesToPoints(0.31496062992126)
        .PrintComments = xlPrintNoComments
        .PrintQuality = 600
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
    End With
    
    
    
    'excel列格式设置
    
    '根据字段类型定每一列的文本还是数值(把分组项目设为字符型)
    For j = 1 To lstTj.ColumnHeaders.count
        If InStr(1, lstTj.ColumnHeaders(j).Text, "(", vbTextCompare) = 0 Then xlApp.Columns(j).NumberFormatLocal = "@"
    Next j
    With xlApp.Cells.Font
        .Name = "宋体"
        .Size = 11
    End With
    '第一行标题
    With xlApp.Rows(1).Font
        .Name = "宋体"
        .Size = 12
        .Bold = True
    End With
    
    '添加excel表头
    i = 1
    For j = 1 To lstTj.ColumnHeaders.count
        If j < 27 Then
                p = Chr(65 + j - 1) & i
            Else
                p = "A" & Chr(65 + j - 1 - 26) & i
        End If
        xlApp.Range(p).FormulaR1C1 = lstTj.ColumnHeaders(j).Text

    Next j
    
    '添加excel内容(从listview中取出)
    i = 2
    j = 0
    For ii = 1 To lstTj.ListItems.count
        p = Chr(65 + j) & i
        xlApp.Range(p).FormulaR1C1 = lstTj.ListItems(ii)
       '字体设计
        If Left(xlApp.Range(p).FormulaR1C1, 3) = "*小计" Or Left(xlApp.Range(p).FormulaR1C1, 3) = "*总计" Then
            With xlApp.Rows(i).Font
                .Name = "宋体"
                .Size = 12
                .Bold = True
            End With
        End If
        For j = 1 To lstTj.ColumnHeaders.count - 1
            If j < 26 Then
                p = Chr(65 + j) & i
            Else
                p = "A" & Chr(65 + j - 26) & i
            End If
            xlApp.Range(p).FormulaR1C1 = lstTj.ListItems(ii).SubItems(j)
            '字体设计
            If Left(xlApp.Range(p).FormulaR1C1, 3) = "*小计" Or Left(xlApp.Range(p).FormulaR1C1, 3) = "*总计" Then
                With xlApp.Rows(i).Font
                    .Name = "宋体"
                    .Size = 12
                    .Bold = True
                End With
            End If
        Next j

        j = 0
        i = i + 1
    Next ii
    '打印格式设置
    
    xlApp.Visible = True
    Set xlApp = Nothing
    Screen.MousePointer = vbDefault
End Sub

Private Sub cmdOr_Click()
    Dim tmpTxt As String
    Dim tmpTxtOf As String
    tmpTxt = cobTxt.Text
    If tmpTxt = "" Then
        MsgBox ("请选择或输入要查找的内容")
        Exit Sub
    End If
    If cobOperator.Text = "like" Then tmpTxt = "%" & tmpTxt & "%"
    If Not txtTxt.Text = "" Then
        txtTxt.Text = txtTxt.Text & " Or "
    End If
    txtTxt.Text = txtTxt.Text & Trim(Left(cobField.Text, Len(cobField.Text) - 50))
    txtTxt.Text = txtTxt.Text & " " & Trim(cobOperator.Text) & " "
    Select Case Right(cobField.Text, 1)
        Case "C"
            tmpTxtOf = "'"
        Case "N"
            tmpTxtOf = ""
        Case Else
            tmpTxtOf = ""
    End Select
    txtTxt.Text = txtTxt.Text & tmpTxtOf & tmpTxt & tmpTxtOf
End Sub

Private Sub cmdQuery_Click()
    Dim rsTmp As New ADODB.Recordset
    Dim i As Integer

    Screen.MousePointer = 11
    If Trim(txtTxt.Text) = "" Then
        sSql = "请指定查询条件!" & Chr(13) & Chr(13) & "如果不指定查询条件,记录数会很多,"
        sSql = sSql & Chr(13) & Chr(13) & "这样会导致结果需要很长时间才能出来,"
        sSql = sSql & Chr(13) & Chr(13) & "如果只是为了统计或导出数据,你可以终止查询,直接进行统计或导出即可!"
        sSql = sSql & Chr(13) & Chr(13) & "确定要列出所有记录吗?"
        If MsgBox(sSql, vbDefaultButton2 + vbExclamation + vbYesNo, "提示信息...") = vbNo Then
            Screen.MousePointer = vbDefault
            Exit Sub
        End If
    End If
    
    sSql = ""
    Dim myObjChk As Control
    For Each myObjChk In frmTjRs.Controls()
            If Left(myObjChk.Name, 8) = "chkField" Then
                If myObjChk.Value = 1 Then
                    If sSql <> "" Then sSql = sSql & ","
                    sSql = sSql & Trim(myObjChk.Caption)
                End If
            End If
    Next myObjChk
    If sSql = "" Then
        MsgBox "请选择你想要显示的项目(字段)"
        Screen.MousePointer = vbDefault
        Exit Sub
    End If
    
    sSql = "select " & sSql & " from " & tmpTableName
    If Not Trim(txtTxt.Text) = "" Then sSql = sSql & " where  " & RTrim(txtTxt.Text)
    If Not Trim(txtTxtOrder.Text) = "" Then sSql = sSql & " order by  " & RTrim(txtTxtOrder.Text)
        
    rsTmp.Open sSql, adoCn, adOpenKeyset, adLockBatchOptimistic, adCmdText
    If rsTmp.RecordCount > 5000 Then
        sSql = "你共查询到 " & rsTmp.RecordCount & " 条记录"
        sSql = sSql & Chr(13) & Chr(13) & "需要等相对长的时间才能看到查询结果"
        sSql = sSql & Chr(13) & Chr(13) & "如果只是为了统计或导出数据,你可以终止查询,直接进行统计或导出即可!"
        sSql = sSql & Chr(13) & Chr(13) & "你确定要继续进行查询吗?"
        If MsgBox(sSql, vbInformation + vbDefaultButton2 + vbYesNo, "提示信息") = vbNo Then
            rsTmp.Close
            Screen.MousePointer = vbDefault
            Exit Sub
        End If
    End If
    
    labQueryR.Caption = "记录数: " & rsTmp.RecordCount
    frameQuery(3).ZOrder 0          '转到查询页面
    frameQuery(3).Refresh
    
    '添加表头
    lstXs.ColumnHeaders.Clear
    For i = 0 To rsTmp.Fields.count - 1
        lstXs.ColumnHeaders.Add , , RTrim(rsTmp.Fields(i).Name), IIf(rsTmp.Fields(i).DefinedSize * 200 < 3000, rsTmp.Fields(i).DefinedSize * 200, 1400)
        '用columnheaders的tag来标志数据的类型是否是字符型
        Select Case rsTmp.Fields(i).Type
            Case 129
                lstXs.ColumnHeaders(i + 1).Tag = "|C"
            Case 200
                lstXs.ColumnHeaders(i + 1).Tag = "|C"
            Case 131
                lstXs.ColumnHeaders(i + 1).Tag = "|N"
            Case 3
                lstXs.ColumnHeaders(i + 1).Tag = "|N"
            Case 131
                lstXs.ColumnHeaders(i + 1).Tag = "|X"
        End Select
    Next i
    '添加内容
    lstXs.Sorted = False
    lstXs.ListItems.Clear
    Do While Not rsTmp.EOF()
        Set lv = lstXs.ListItems.Add(, , IIf(IsNull(Trim(rsTmp(0))), "", Trim(rsTmp(0))))
        For i = 1 To rsTmp.Fields.count - 1
            lv.ListSubItems.Add , , IIf(IsNull(Trim(rsTmp(i))), "", Trim(rsTmp(i)))
        Next i
        rsTmp.MoveNext
    Loop
    rsTmp.Close
    Screen.MousePointer = vbDefault
End Sub

Private Sub cmdSelectAll_Click()
    Dim myObjChk As Control
     For Each myObjChk In frmTjRs.Controls()
            If Left(myObjChk.Name, 8) = "chkField" Then myObjChk.Value = 1
     Next myObjChk
End Sub

Private Sub cmdSelectNoAll_Click()
    Dim myObjChk As Control
     For Each myObjChk In frmTjRs.Controls()
            If Left(myObjChk.Name, 8) = "chkField" Then myObjChk.Value = 0
     Next myObjChk
End Sub

Private Sub cobCount_Click(Index As Integer)
    cobCountSort_Click (Index)
End Sub

Private Sub cobCountSort_Click(Index As Integer)
    chkCountSort(Index).Enabled = False
    If cobCount(Index).ListIndex < 1 Then cobCountSort(Index).ListIndex = 0
    If Right(cobCount(Index).Text, 1) <> "N" And cobCountSort(Index).ListIndex <> 0 Then
       MsgBox ("对字符串只能进行计数功能!")
       cobCountSort(Index).ListIndex = 0
    End If
    If cobCountSort(Index).ListIndex = 0 Then chkCountSort(Index).Enabled = True
End Sub

Private Sub Command1_Click()

End Sub

Private Sub Form_Load()
    Left = (Screen.Width - Width) / 2
    Top = (Screen.Height - Height) / 2
    Dim rsTmp As New ADODB.Recordset
    Dim i As Integer
    Dim j As Integer
    
    ' 挑出一条记录,为了取得字段名
    sSql = "select top 1 " & tmpStrSqlField & tmpStrSqlTable
    rsTmp.Open sSql, adoCn, adOpenKeyset, adLockBatchOptimistic, adCmdText
    
    '添加列表框中的值
    For j = 0 To 3
        cobGroup(j).AddItem "不分组"
        cobCount(j).AddItem "不进行统计"
        cobCountSort(j).AddItem "计数" & Space(50) & "count"
        cobCountSort(j).AddItem "求和" & Space(50) & "sum"
        cobCountSort(j).AddItem "平均值" & Space(50) & "avg"
        cobCountSort(j).AddItem "最大值" & Space(50) & "max"
        cobCountSort(j).AddItem "最小值" & Space(50) & "min"
    Next j
    
    
    For i = 0 To rsTmp.Fields.count - 1
        '取得字段类型,我是基于SQL SERVER做的,如果要联接其它类型的数据库,请更改
        Select Case rsTmp.Fields(i).Type
            Case 129
                sSql = "|C"
            Case 200
                sSql = "|C"
            Case 131
                sSql = "|N"
            Case 3
                sSql = "|N"
            Case 131
                sSql = "|N"
            Case Else
                sSql = "|C"
        End Select
        '填充制定查询条件的cob框
        cobField.AddItem RTrim(rsTmp.Fields(i).Name) & Space(50) & sSql
        '填充统计用的cob框
        For j = 0 To 3
            cobGroup(j).AddItem RTrim(rsTmp.Fields(i).Name) & Space(50) & sSql
            cobCount(j).AddItem RTrim(rsTmp.Fields(i).Name) & Space(50) & sSql
        Next j
        '动态生成chk对象,供字段选择
        Set chk = Controls.Add("VB.checkbox", "chkField" & i, frameQuery(1))
        With chk
            .Visible = True
            .Width = 2000
            .Height = 375
            .Caption = RTrim(rsTmp.Fields(i).Name)
            .Top = 400 + (i Mod 16) * 400
            .Left = 400 + (i \ 16) * 2600
        End With
    Next i
    rsTmp.Close

    cobField.ListIndex = 0
    cobOperator.ListIndex = 0
    For j = 0 To 3
        cobCountSort(j).ListIndex = 0
    Next j
    
    On Error Resume Next
    '如果存在临时表,先删除
    sSql = " drop table " & tmpTableName
    adoCn.Execute sSql
    
    '生成临时表,以备查询用
    sSql = "select " & tmpStrSqlField
    sSql = sSql & " into " & tmpTableName & " "
    sSql = sSql & tmpStrSqlTable

    adoCn.Execute sSql
 
End Sub

Private Sub Form_Unload(Cancel As Integer)
    On Error Resume Next
    '如果存在临时表,先删除
    sSql = " drop table " & tmpTableName
    adoCn.Execute sSql
End Sub

Private Sub lstTj_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
    lstTj.SortKey = ColumnHeader.Index - 1
    If lstTj.SortOrder = lvwAscending Then
        lstTj.SortOrder = lvwDescending
    Else
        lstTj.SortOrder = lvwAscending
    End If
    lstTj.Sorted = True
End Sub

Private Sub lstXs_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
    lstXs.SortKey = ColumnHeader.Index - 1
    If lstXs.SortOrder = lvwAscending Then
        lstXs.SortOrder = lvwDescending
    Else
        lstXs.SortOrder = lvwAscending
    End If
    lstXs.Sorted = True
End Sub

Private Sub tabPage_Click()
    frameQuery(tabPage.SelectedItem.Index).ZOrder 0
End Sub


'设定 统计listview框 的颜色
Private Sub SetListItemColor(lv As ListView, picBg As PictureBox)

    Dim i As Integer

    Dim myItem As String

    picBg.BackColor = lv.BackColor

    lv.Parent.ScaleMode = vbTwips

    picBg.ScaleMode = vbTwips

    picBg.BorderStyle = vbBSNone

    picBg.AutoRedraw = True

    picBg.Visible = False

    

    picBg.Width = lv.Width

    picBg.Height = lv.ListItems(1).Height * (lv.ListItems.count)

    picBg.ScaleHeight = lv.ListItems.count

    picBg.ScaleWidth = 1

    picBg.DrawWidth = 1

    '-----------------------------

    '开始绘制图形,让*小计行不一样

    '------------------------------

    For i = 1 To lv.ListItems.count
        For j = 0 To 2
            If j = 0 Then
                myItem = lv.ListItems(i)
            Else
                myItem = lv.ListItems(i).SubItems(j)
            End If

            If Left(myItem, 3) = "*小计" Then
    
                Select Case j
                    Case 0
                        picBg.Line (0, i - 1)-(1, i), vbMagenta, BF
                    Case 1
                        picBg.Line (0, i - 1)-(1, i), vbMagenta, BF
                    Case 2
                        picBg.Line (0, i - 1)-(1, i), vbMagenta, BF
                End Select
    
            End If
        Next j

    Next i
 
    lv.Picture = picBg.Image

End Sub


⌨️ 快捷键说明

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