组合查询不愧是机房三大难点之一,起初不知道如何组建查询的关系就去找巨人去了,最后看到巨人们的总结,捋顺了才明白,其实很简单。
我们的字段名选择是汉字,要想在数据库中查询字段,根本就不认识,这就需要我将汉字转换为相应的字符串,为了方便简洁,定义一个函数,代码中的FiledName就是我要利用到的一个函数。
'将汉字转换为相应的字段名字
Public Function FiledName(StrFiledName As String) As String
Select Case StrFiledName
Case "卡号"
FiledName = "cardno"
Case "学号"
FiledName = "studentNo"
Case "姓名"
FiledName = "studentName"
Case "性别"
FiledName = "Sex"
Case "学院"
FiledName = "department"
Case "年级"
FiledName = "grade"
Case "班级"
FiledName = "class"
Case "与"
FiledName = "and"
Case "或"
FiledName = "or"
End Select
End Function
我们以学生基本信息维护为例:
首先,它是一个多条件的组合查询,也就是说当我们先判断第一条件,若需要,在组合查询的列表框选择我们组合条件(即“与”or“或”)与第二条件判断,若第二条件也满足不了查询需求,则可使用第三条件。
关键代码展示:
Private Sub cmdQuery_Click()
Dim mrc As ADODB.Recordset
Dim txtsql As String
Dim msgtext As String
txtsql = "select * from student_Info where "
'判断字段的选择是否为空
If Not Testtxt(comboFiledName1.Text) Then
MsgBox "请选择字段!", vbOKOnly + vbExclamation, "警告"
comboFiledName1.SetFocus
Exit Sub
End If
'判断操作符的选择是否为空
If Not Testtxt(comboOperate1.Text) Then
MsgBox "请选择操作符!", vbOKOnly + vbExclamation, "警告"
comboOperate1.SetFocus
Exit Sub
End If
'判断要查询的内容是否为空
If Not Testtxt(txtContent1.Text) Then
MsgBox "请在输入要查询的内容", vbOKOnly + vbExclamation, "警告"
txtContent1.SetFocus
Exit Sub
End If
txtsql = txtsql & FiledName(comboFiledName1.Text) & " " & comboOperate1.Text & "'" & txtContent1.Text & "'"
'利用模版函数查看是否是组合查询第一行为空时,查询无效
'开始组合查询
If Trim(comboRelation1.Text <> "") Then
If Trim(comboFiledName2.Text) = "" Or Trim(comboOperate2.Text) = "" Or Trim(txtContent2.Text) = "" Then
MsgBox "您选择了组合关系,请输入数据之后再查询", vbOKOnly, "提示信息"
Exit Sub
Else
txtsql = txtsql & FiledName(comboRelation1.Text) & " " & FiledName(comboFiledName2.Text) & comboOperate2.Text & "'" & Trim(txtContent2.Text) & "'"
End If
End If
If Trim(comboRelation2.Text) <> "" Then
If Trim(comboFiledName3.Text) = "" Or Trim(comboOperate3.Text) = "" Or Trim(txtContent3.Text) = "" Then
MsgBox "您选择了第二个组合,请输入数据之后在查询", vbOKOnly, "提示"
Exit Sub
Else
txtsql = txtsql & FiledName(comboRelation2.Text) & " " & FiledName(comboFiledName3.Text) & comboOperate3.Text & "'" & Trim(txtContent3.Text) & "'"
End If
End If
总结:
通过组合查询,我认识最深的一点就是不要上来就去看被人的博客,别人的不一定好,一定要自己先把逻辑关系弄清,要不上来就抄人家的代码之后功能实现了,感觉会了,心理就会想不过如此嘛!可当真正自己扔掉拐棍就会发现自己寸步难行。