机房组合查询

关于VB版机房管理的组合组合查询

在VB版机房管理系统中运用到很多的数据库查询,也运用了狠多的组合查询,对于刚接触数据库的弄清楚组合查询是一个很头疼的事情。
接下来我来简单以我自己的方式写一下一个简单的组合查询

首先放一个组合查询的窗体给大家看下主要的组成部分

(我喜欢做成越简单的界面,可能追求不一样!)
这里写图片描述

当然所有的都会有一些思考的时间去设计这个东西,即便有以前师哥师姐做出来的参考,当然为了省更多的代码,也对以前的做了很多的改变。如下图,看看大家能看去之中的区别吗
这里写图片描述
当然知道的就是差在三个Frame上边,如果几个条件的查询,下边控件的Enabled是需要很多的代码去控制的,所以我就简便的直接改变Frame.Enabled属性值进行操作,省去很多的代码。

操作员工作记录查询

此查询就是连接数据库,查询其中worklog表

这里写图片描述

代码

'结合第一图对应command来理解此代码
Private Sub cmdExcel_Click()'导出excel
  Dim xlApp As Excel.Application '定义一个excel应用程序
  Dim xlBook As Excel.Workbook '定义一个工作簿
  Dim xlSheet As Excel.Worksheet '定义一个工作表
  Dim xlRange As Excel.Range '定义一个单元格范围

  Dim i As Integer  '定义横坐标
  Dim j As Integer  '定义纵坐标

  Set xlApp = CreateObject("excel.application") '创建excel应用程序对象
  Set xlBook = xlApp.Workbooks.Add '创建一个工作簿
  Set xlSheet = xlBook.Worksheets(1)  '创建一个工作表

  DoEvents  '转让控制权,以便让操作系统处理其它的事件
  With myFlexGrid  '将FlexGrid控件中内容导入excel表格中
    For i = 0 To .Rows - 1  '遍历所有的行
      For j = 0 To .Cols - 1 '遍历所有的列
       DoEvents '转让控制权,以便让操作系统处理其它的事件
       xlApp.ActiveSheet.Cells(i + 1, j + 1) = .TextMatrix(i, j) '创建新的单元格,并添加flexgrid中的内容
       Next j
    Next i
    End With

    xlApp.Visible = True

End Sub

Private Sub cmdExpty_Click()

For Each ctrl In Me.Controls
If TypeOf ctrl Is ComboBox Then
ctrl.Text = ""
End If
If TypeOf ctrl Is TextBox Then
ctrl.Text = ""
End If
Next

  myFlexGrid.Clear
  myFlexGrid.Rows = 0

End Sub
'查询按钮事件
Private Sub cmdInquire_Click()

    Dim MsgText As String
    Dim MsgText1 As String
    Dim MsgText2 As String

    Dim txtsql, txtSQL1, txtSQL2 As String
    Dim mrc As adodb.Recordset

    Dim a, b, c As String
    Dim a1, b1, c1 As String
    Dim i

Select Case cb1(0).Text
         Case "教师"
           a = "UserId"
         Case "级别"
           a = "level"
        Case "注册日期"
           a = "LoginDate"
         Case "注册时间"
           a = "LoginTime"
         Case "注销日期"
           a = "LogoutDate"
        Case "注销时间"
           a = "LogoutTime"
         Case "机器名"
           a = "computer"
        End Select
Select Case cb1(1).Text
        Case "教师"
          b = "UserId"
         Case "级别"
           b = "level"
        Case "注册日期"
           b = "LoginDate"
         Case "注册时间"
          b = "LoginTime"
         Case "注销日期"
           b = "LogoutDate"
        Case "注销时间"
           b = "LogoutTime"
         Case "机器名"
           b = "computer"
        End Select

Select Case cb1(2).Text
        Case "教师"
          c = "UserId"
         Case "级别"
           c = "level"
        Case "注册日期"
           c = "LoginDate"
         Case "注册时间"
          c = "LoginTime"
         Case "注销日期"
           c = "LogoutDate"
        Case "注销时间"
           c = "LogoutTime"
         Case "机器名"
         c = "computer"
        End Select


  For i = 0 To 2
  If tt1(i).Visible = True And tt1(i) = "" Then
  tt1(i).SetFocus
  End If
  Next

  If f2.Enabled = True Then
  If cb1(1) = "" Or cb2(1) = "" Then
  MsgBox "请输入完整查询信息!"
  End If
  End If

  If f3.Enabled = True Then
    If cb1(2) = "" Or cb2(2) = "" Then
    MsgBox "请输入完整查询信息!"
    Exit Sub
  End If
  End If

If DTP1(0).Visible = True Then
    a1 = Format(DTP1(0), "yyyy-mm-dd")
    Else
    a1 = tt1(0).Text
    End If
If DTP1(1).Visible = True Then
   b1 = Format(DTP1(1), "yyyy-mm-dd")
     Else
    b1 = tt1(1)
     End If
   If DTP1(2).Visible = True Then
      c1 = Format(DTP1(2), "yyyy-mm-dd")
   Else
     c1 = tt1(2).Text
   End If


      txtsql = "select * from worklog_info where " & a & cb2(0).Text & "'" & a1 & "'"
      txtSQL1 = txtsql & cb3.Text & " " & b & cb2(1).Text & " '" & b1 & "'"
      txtSQL2 = txtSQL1 & cb6.Text & " " & c & cb2(2).Text & " ' " & c1 & "'"

    If cb3.Text = "" Then
        Set mrc = ExecuteSQL(txtsql, MsgText)
    ElseIf cb6.Text = "" Then
        Set mrc = ExecuteSQL(txtSQL1, MsgText1)
    ElseIf Trim(cb6.Text) > 0 Then
        Set mrc = ExecuteSQL(txtSQL2, MsgText2)

         End If


     If mrc.EOF Then
        MsgBox "暂无无数据", vbOKOnly + vbExclamation, "提示"
        End If
     If mrc.EOF = False Then
                  With myFlexGrid
                .Rows = 1
                .CellAlignment = 4
                .TextMatrix(0, 0) = "序列号"
                .TextMatrix(0, 1) = "教师"
                .TextMatrix(0, 2) = "级别"
                .TextMatrix(0, 3) = "注册日期"
                .TextMatrix(0, 4) = "注册时间"
                .TextMatrix(0, 5) = "注销日期"
                .TextMatrix(0, 6) = "注销时间"
                .TextMatrix(0, 7) = "机器名"
                .TextMatrix(0, 8) = "状态"
                 .ColWidth(5) = 2000

                 Do While Not mrc.EOF
               .Rows = .Rows + 1
               .CellAlignment = 4
               .TextMatrix(.Rows - 1, 0) = Trim(mrc.Fields(0))
               .TextMatrix(.Rows - 1, 1) = Trim(mrc.Fields(1))
               .TextMatrix(.Rows - 1, 2) = Trim(mrc.Fields(2))
               .TextMatrix(.Rows - 1, 3) = Format(mrc.Fields(3))
               .TextMatrix(.Rows - 1, 4) = Format(mrc.Fields(4))
               .TextMatrix(.Rows - 1, 5) = Format(mrc.Fields(5))
               .TextMatrix(.Rows - 1, 6) = Format(mrc.Fields(6))
               .TextMatrix(.Rows - 1, 7) = Trim(mrc.Fields(7))
               .TextMatrix(.Rows - 1, 8) = Trim(mrc.Fields(8))

               mrc.MoveNext
          Loop
      End With


End If
End Sub

Private Sub Form_Load() 'for 循环遍历添加内容
Dim i, j

For i = 0 To 2
tt1(i).Visible = False
Next

f2.Enabled = False
f3.Enabled = False

For i = 0 To 2
    With cb1(i)
    .AddItem "教师"
    .AddItem "注册日期"
    .AddItem "注册时间"
    .AddItem "注销日期"
    .AddItem "注销时间"
    .AddItem "机器名"
    End With
    Next

For j = 0 To 2
    With cb2(j)
    .AddItem "="
    .AddItem "<"
    .AddItem ">"
    .AddItem "<>"
    End With
Next

With cb3
         .AddItem ""
        .AddItem "and"
        .AddItem "or"
        End With
 With cb6
        .AddItem ""
        .AddItem "and"
        .AddItem "or"
End With


End Sub

Private Sub cb3_click()
    If Trim(cb3.Text) = "" Then
        f2.Enabled = False
    Else
        f2.Enabled = True
    End If
End Sub

Private Sub cb6_click()
    If Trim(cb6.Text) = "" Then
        f3.Enabled = False
    Else
        f3.Enabled = True
    End If
End Sub

Private Sub cb1_click(index As Integer) '随cb1(i)的内容来更换
    Dim i
    For i = 0 To 2
        If cb1(i).Text = "教师" Or cb1(i).Text = "机器名" Then
         tt1(i).Visible = True
        DTP1(i).Visible = False
    Else
        tt1(i).Visible = False
        DTP1(i).Visible = True
    End If
    Next
End Sub

从代码可以看出,其中逻辑判断控件的显示与否要远远高于数据库查询,思考总是有挠头的时候,我也是思考了一段事件才写出来的,也希望大家能够借鉴。

猜你喜欢

转载自blog.csdn.net/awiner/article/details/80045896