前言
在刚刚开始机房的时候,仅仅刚刚把整个工程的窗体控件布完,听一些同学说组合查询有些难,并且我对他们的话深信不疑。但是你现在不做总会到一点时间你是需要去完成的,想到这些,便开始了探索同学们口中的“难”到底有多“难”。
逻辑分析
想要功能更快的实现,理清逻辑很关键。该动笔时就去拿笔画,一味地在脑子里想很容易把他们之间的联系搞混。起初正是因为没有动手去多画画它们之间的联系,导致走了不少弯路。下午的时候拿起笔来在纸上把它们之间的逻辑关系理了一遍,结果困扰了两天的问题不到两个小时就完全拿下了。
我们以学生基本信息维护为例:首先,它是一个多条件的组合查询,也就是说当我们先判断第一条件,若需要,在组合查询的列表框选择我们组合条件(即“与”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