组合查询是机房三大难点之一,现在我就拿学生基本信息维护来说,还有学生上机统计信息查询和操作员工作记录窗体和学生基本信息维护死里都是一样的,我就不一一阐述了。组合查询在学生收费系统的时候也出现过 ,checkbox就用到了组合查询,也是查询窗体。只不过当时就是比较浅,用的不是特别多。联系之前用到的,现在想想组合查询也不是很难。
本窗体我没有画流程图,下面来说说我的思路吧!
先判断三行条件是否输入完整
若第一行条件为空:则提示请把第一行查询条件输入完整,第二三行条件为空
若第一行条件不为空:若第一个关系为空,则查询第一行条件中数据;若第一个关系不为空,则判断第二行条件是否为空:
若第二行条件为空,则提示请把第二行查询条件输入完整,第三行条件为空;
若第二行条件不为空:若第二个关系为空,则查询第一二行条件中数据;若第二个关系不为空,则判断第三行条件是否为空;
若第三行条件为空,则提示请把第三行查询条件输入完整;
若第三行条件不为空,第一行条件为空,则查询第二三行条件中数据
若三行条件都不为空,则查询一二三行条件的数据

下面来分享一下代码:
模块定义1个函数过程,在这里进行翻译,因为数据库 工作时是英文(以后窗体来调用):
字段:
Public Function Field(a As String) As String
Select Case a
'定义一个函数过程因为数据库在进行工作时使用英文,在这里进行翻译
Case "卡号"
Field = "cardno"
Case "姓名"
Field = "studentname"
Case "学号"
Field = "studentno"
Case "上机日期"
Field = "ondate"
Case "上机时间"
Field = "ontime"
Case "下机日期"
Field = "offdate"
Case "下机时间"
Field = "offtime"
Case "消费金额"
Field = "consume"
Case "余额"
Field = "cash"
Case "备注"
Field = "status"
Case "教师"
Field = "userID"
Case "注册日期"
Field = "logindate"
Case "注册时间"
Field = "logintime"
Case "注销日期"
Field = "logoutdate"
Case "注销时间"
Field = "logouttime"
Case "机器名"
Field = "computer"
Case "性别"
Field = "sex"
Case "年级"
Field = "grade"
Case "班级"
Field = "class"
Case "系别"
Field = "department"
End Select
End Function
关系:
Public Function relation(i As String) As String
Select Case i
Case "与"
relation = "and"
Case "或"
relation = "or"
End Select
End Function
清空控件内容:
Rem:清空控件内容
Private Sub cmdclear_Click()
Dim ctrl As Control
For Each ctrl In Me.Controls
If TypeOf ctrl Is TextBox Then
ctrl.Text = ""
ElseIf TypeOf ctrl Is ComboBox Then
ctrl.Text = ""
End If
Next
'清表格,还原加载的第一行
MSHFlexGrid1.rows = 1
MSHFlexGrid1.rows = MSHFlexGrid1.rows + 1
End Sub
根据不同的字段显示不同的控件和符号(用的textbox和dtpicker)可以更方便的来选择日期 (用的控件数组)
Rem:根据不同的字段显示不同的控件
Private Sub combo1_click(Index As Integer)
Dim i As Integer
Dim j As Integer
i = Index
If Trim(combo1(i).Text) = "卡号" Or Trim(combo1(i).Text) = "姓名" Or Trim(combo1(i).Text) = "学号" Or Trim(combo1(i).Text) = "金额" Or Trim(combo1(i).Text) = "年级" Or Trim(combo1(i).Text) = "班级" Or Trim(combo1(i).Text) = "性别" Or Trim(combo1(i).Text) = "系别" Or Trim(combo1(i).Text) = "类型" Or Trim(combo1(i).Text) = "备注" Then
comboS1(i).Clear
comboS1(i).AddItem "="
comboS1(i).AddItem "<>"
Else
comboS1(i).Clear
comboS1(i).AddItem "="
comboS1(i).AddItem "<>"
comboS1(i).AddItem ">"
comboS1(i).AddItem "<"
End If
txtIC1(i).Text = ""
'如果字段名是时间日期,则使用时间日期控件
For i = 0 To 2
If combo1(i).Text = "上机日期" Or combo1(i).Text = "下机日期" Then
DTPicker1(i).Format = dtpLongDate
DTPicker1(i).Visible = True
txtIC1(i).Visible = False
Else
If combo1(i).Text = "上机时间" Or combo1(i).Text = "下机时间" Then
DTPicker1(i).Format = dtpTime '定义日期格式
DTPicker1(i).Visible = True
txtIC1(i).Visible = False
Else
DTPicker1(i).Visible = False
txtIC1(i).Visible = True
End If
End If
Next i