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