前言
在刚刚开始机房的时候,仅仅刚刚把整个工程的窗体控件布完,听一些同学说组合查询有些难,并且我对他们的话深信不疑。但是你现在不做总会到一点时间你是需要去完成的,想到这些,便开始了探索同学们口中的“难”到底有多“难”。
逻辑分析
想要功能更快的实现,理清逻辑很关键。该动笔时就去拿笔画,一味地在脑子里想很容易把他们之间的联系搞混。起初正是因为没有动手去多画画它们之间的联系,导致走了不少弯路。下午的时候拿起笔来在纸上把它们之间的逻辑关系理了一遍,结果困扰了两天的问题不到两个小时就完全拿下了。
我们以学生基本信息维护为例:首先,它是一个多条件的组合查询,也就是说当我们先判断第一条件,若需要,在组合查询的列表框选择我们组合条件(即“与”or“或”)与第二条件判断,若第二条件也满足不了查询需求,则可使用第三条件。
代码实现
'判断第一行查询条件是否完整
If Not Testtxt(cboField(0).Text) Or Not Testtxt(cboOpSign(0).Text) Or Not Testtxt(txtInquiryContent(0).Text) Then
MsgBox "请填写完整的查询条件!", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If
cboF = cboField(0).Text
Call TRANSFORM(cboF, "")
'查询条件
txtSQL = "select * from student_info where " & _
cboF & cboOpSign(0).Text & "'" & txtInquiryContent(0).Text & "'"
'如果第一个组合查询不为空,判断第二行条件是否为空
If Testtxt(cboCombineRelation(0).Text) Then
'判断第二行查询条件是否完整
If Not Testtxt(cboField(1).Text) Or Not Testtxt(cboOpSign(1).Text) Or Not Testtxt(txtInquiryContent(1).Text) Then
MsgBox "请填写完整的查询条件!", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If
cboF = cboField(1).Text
cboC = cboCombineRelation(0).Text
Call TRANSFORM(cboF, cboC)
txtSQL = txtSQL & " " & cboC & " " & cboF & cboOpSign(1).Text & "'" & txtInquiryContent(1).Text & "'"
GoTo ADD_ROW:
End If
'如果第二个组合查询不为空,判断第三行条件是否为空
If Testtxt(cboCombineRelation(0).Text) Then
'判断第三行查询条件是否完整
If Testtxt(cboField(2).Text) Or Not Testtxt(cboOpSign(2).Text) Or Not Testtxt(txtInquiryContent(2).Text) Then
MsgBox "请填写完整的查询条件!", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If
cboF = cboField(2).Text
cboC = cboCombineRelation(1).Text
Call TRANSFORM(cboF, cboC)
txtSQL = txtSQL & " " & cboC & " " & cboF & cboOpSign(2).Text & "'" & txtInquiryContent(2).Text & "'"
End If
ADD_ROW:
Set mrc = ExecuteSQL(txtSQL, MsgText)
If mrc.EOF Then
MsgBox "未查找到符合条件的数据!", vbOKOnly, "提示"
Exit Sub
End If
With MSHFlexGrid1
.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) = "备注" '第九列表头
.TextMatrix(0, 9) = "状态" '第十列表头
.TextMatrix(0, 10) = "日期" '第十一列表头
.TextMatrix(0, 11) = "时间" '第十二列表头
.TextMatrix(0, 12) = "类型" '第十三列表头
'向表中添加数据
Do While Not mrc.EOF
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = mrc.Fields(0)
.TextMatrix(.Rows - 1, 1) = mrc.Fields(1)
.TextMatrix(.Rows - 1, 2) = mrc.Fields(2)
.TextMatrix(.Rows - 1, 3) = mrc.Fields(3)
.TextMatrix(.Rows - 1, 4) = mrc.Fields(4)
.TextMatrix(.Rows - 1, 5) = mrc.Fields(5)
.TextMatrix(.Rows - 1, 6) = mrc.Fields(6)
.TextMatrix(.Rows - 1, 7) = mrc.Fields(7)
.TextMatrix(.Rows - 1, 8) = mrc.Fields(8)
.TextMatrix(.Rows - 1, 9) = mrc.Fields(10)
.TextMatrix(.Rows - 1, 10) = mrc.Fields(12)
.TextMatrix(.Rows - 1, 11) = mrc.Fields(13)
.TextMatrix(.Rows - 1, 12) = mrc.Fields(14)
mrc.MoveNext
Loop
End With