前言
1.
机房收费系统中的组合查询窗体有三个,分别为学生上机统计信息查询、学生基本信息维护、操作员工作记录,三个大同小异,基本的思路是相通的,主要涉及到的为查询操作和修改操作。
既然为组合查询,当然对输入的条件进行一个组合查询工作,我的基本思路:点击查询之后,先将第一行内容记录,判断是否选择第一个组合查询,如果是,那么第二行文本框可用,记录第二行信息,以此类推,最大的难点就在于将记录的信息转化为SQL语句内容,大家已经都学过数据库这本书了,对于VB于SQL语句的转化应该还是没问题的吧!
2.
需要注意的一点就是,学生上机统计信息查询和操作原工作记录窗体中,有时间的选项,大家是否应用了时间控件呢?(反正以我的脑袋瓜,呃,,是在师傅提出来之后才想到的)当用户选择注册日期或时间的时候,要查询的内容就会变成DTPicker1控件,方便用户的体验。
3.
对于学生基本信息维护中,有一个修改的选项,其中涉及到对MSHFlexGrid1控件中的选项进行选择的问题,代码如下:
MSHFlexGrid1.SelectionMode = flexSelectionByRow '设置msgflexgrid1的选择方式是按行选择
haveselected = False '设置标志防止没选择就被删除
Private Sub MSHFlexGrid1_Click()
MSHFlexGrid1.FocusRect = flexFocusNone '选中行显示焦点区域
MSHFlexGrid1.HighLight = flexHighlightWithFocus '选中行突出显示
haveselected = True '设置标志允许修改
n = MSHFlexGrid1.RowSel
End Sub
一、逻辑思路
二、部分代码展示
就拿学生上机统计信息查询为例
Private Sub Combofield7_Click()
If Combofield7.Text <> "" Then
ComboField2.Enabled = True
Combofield5.Enabled = True
txtInquiryContent2.Enabled = True
Else
ComboField2.Enabled = False
ComboField3.Enabled = False
Combofield5.Enabled = False
Combofield6.Enabled = False
txtInquiryContent2.Enabled = False
txtInquiryContent3.Enabled = False
txtInquiryContent2.Text = ""
txtInquiryContent3.Text = ""
End If
End Sub
'判断第一行内容是否完整
If Trim(ComboField1.Text) = "" Or Trim(Combofield4.Text) = "" Then
MsgBox "请将第一行信息输入完整!", 0 + 48, "提示"
Exit Sub
End If
If (Trim(ComboField1.Text) = "姓名" Or Trim(ComboField1.Text) = "消费金额" Or Trim(ComboField1.Text) = "余额" Or Trim(ComboField1.Text) = "备注") And Trim(txtInquiryContent1.Text) = "" Then
MsgBox "请将第一行信息输入完整!", 0 + 48, "提示"
Exit Sub
Else
txtsql = "select * from line_info where "
If DTPicker1.Visible = True Then
'调用学生信息表,记录查询语句
txtsql = txtsql & field(ComboField1.Text) & " " & Combofield4.Text & "'" & DTPicker1.Value & "'"
Else
'调用学生信息表,记录查询语句
txtsql = txtsql & field(ComboField1.Text) & " " & Combofield4.Text & "'" & Trim(txtInquiryContent1.Text) & "'"
End If
'判断是否选择第一个组合查询
If Trim(Combofield7.Text) <> "" Then
'判断第二行内容是否完整
If Trim(ComboField2.Text) = "" Or Trim(Combofield5.Text) = "" Then
MsgBox "你选择了第一个组合查询,请将第二行内容输入完整!", 0 + 48, "提示"
Exit Sub
End If
If (Trim(ComboField2.Text) = "姓名" Or Trim(ComboField2.Text) = "消费金额" Or Trim(ComboField2.Text) = "余额" Or Trim(ComboField2.Text) = "备注") And Trim(txtInquiryContent2.Text) = "" Then
MsgBox "你选择了第一个组合查询,请将第二行内容输入完整!", 0 + 48, "提示"
Exit Sub
Else
If DTPicker2.Visible = True Then
'调用学生信息表,记录查询记录
txtsql = txtsql & " " & field(Combofield7.Text) & " " & field(ComboField2.Text) & " " & Combofield5.Text & "'" & DTPicker2.Value & "'"
Else
txtsql = txtsql & " " & field(Combofield7.Text) & " " & field(ComboField2.Text) & Combofield5.Text & "'" & Trim(txtInquiryContent2.Text) & "'"
End If
End If
End If
'判断是否选择第二个组合查询
If Trim(Combofield8.Text) <> "" Then
'判断第三行内容是否输入完整
If Trim(ComboField3.Text) = "" Or Trim(Combofield6.Text) = "" Then
MsgBox "你选择了第二个组合查询,请将第三行内容输入完整!", 0 + 48, "提示"
Exit Sub
End If
If (Trim(ComboField3.Text) = "姓名" Or Trim(ComboField3.Text) = "消费金额" Or Trim(ComboField3.Text) = "余额" Or Trim(ComboField3.Text) = "备注") And Trim(txtInquiryContent3.Text) = "" Then
MsgBox "你选择了第二个组合查询,请将第三行内容输入完整!", 0 + 48, "提示"
Exit Sub
Else
If DTPicker3.Visible = True Then
'调用学生信息表,记录查询信息
txtsql = txtsql & " " & field(Combofield8.Text) & " " & field(ComboField3.Text) & " " & Combofield6.Text & "'" & DTPicker3.Value & "'"
Else
txtsql = "select * from line_info where "
txtsql = txtsql & " " & field(Combofield8.Text) & " " & field(ComboField3.Text) & Combofield6.Text & "'" & Trim(txtInquiryContent3.Text) & "'"
End If
End If
End If
End If
Set mrc = ExecuteSQL(txtsql, msgtext)
Private Sub comboField1_Click()
Combofield4.Clear '避免重复添加操作符
Select Case ComboField1.Text
Case "教师"
Combofield4.AddItem "="
Combofield4.AddItem "<>"
txtInquiryContent1.Visible = True
txtInquiryContent1.Enabled = True
DTPicker1.Visible = False
Case "注册日期"
Combofield4.AddItem "="
Combofield4.AddItem ">"
Combofield4.AddItem "<"
Combofield4.AddItem "<>"
txtInquiryContent1.Visible = False
DTPicker1.Visible = True
Case "注册时间"
Combofield4.AddItem "="
Combofield4.AddItem ">"
Combofield4.AddItem "<"
Combofield4.AddItem "<>"
txtInquiryContent1.Visible = False
txtInquiryContent1.Enabled = False
DTPicker1.Visible = True
Case "注销日期"
Combofield4.AddItem "="
Combofield4.AddItem ">"
Combofield4.AddItem "<"
Combofield4.AddItem "<>"
txtInquiryContent1.Visible = False
txtInquiryContent1.Enabled = False
DTPicker1.Visible = True
Case "注销时间"
Combofield4.AddItem "="
Combofield4.AddItem ">"
Combofield4.AddItem "<"
Combofield4.AddItem "<>"
txtInquiryContent1.Visible = False
txtInquiryContent1.Enabled = False
DTPicker1.Visible = True
Case "机器名"
Combofield4.AddItem "="
Combofield4.AddItem "<>"
txtInquiryContent1.Visible = True
txtInquiryContent1.Enabled = True
DTPicker1.Visible = False
End Select
End Sub
Public Function field(a As String) As String
'将文本框中的字段返回到数据库中
Select Case a
Case "教师"
field = "userid"
Case "注册日期"
field = "logindate"
Case "注册时间"
field = "logintime"
Case "注销日期"
field = "logoutdate"
Case "注销时间"
field = "logouttime"
Case "机器名"
field = "computer"
Case "与"
field = "and"
Case "或"
field = "or"
End Select
End Function
三、导出为Excel
Dim i As Integer '声明一个行变量
Dim j As Integer '声明一个列变量
Dim excelapp As Excel.Application
Dim excelbook As Excel.Workbook
Dim excelsheet As Excel.Worksheet '声明一个Excel工作簿
Set excelapp = New Excel.Application '建立一张表
Set excelbook = excelapp.Workbooks.Add '添加新的工作簿
Set excelsheet = excelbook.Worksheets(1) '建立工作表
DoEvents '转让控制权,以便让操作系统处理其他的事件
With MSHFlexGrid1 '将msgflexgrid1中的内容写到表格中
For i = 0 To .Rows - 1
For j = 0 To .Cols - 1
DoEvents
excelapp.ActiveSheet.Cells(i + 1, j + 1) = .TextMatrix(i, j) '注意Excel是从第一行第一列开始的,而窗体中的表是从第0行第1列开始的
Next j
Next i
End With
'保存路径
excelapp.Visible = True
Set excelapp = Nothing
End Sub