王璐 廊坊师范学院信息技术提高班 十二期

机房的组合查询把数据库查询的方式变得复杂与细腻,,组合查询也更便于,用户查询到自己所“心仪的”的数据。

拿机房收费系统里的操作员工作记录窗体为例,我们来具体了解一下组合查询。

1.首先将上述窗体的控件做好命名。

字段名一列的三个控件分别为,combo1(0),combo1(1),combo1(2)

操作符一列的三个控件分别为,combo2(0),combo2(1),combo2(2)

查询内容一列的三个控件分别为,Text1(0),Text1(1),Text1(2)

组合关系一列的三个控件分别为,combo3(0),combo3(1),combo3(2)

2.窗体加载代码实现。

3.分析组合关系。

上图解析:

上图的判断组合关系,目的在与:只有选择了组合关系,相应选项才可用。 分四种情况分析 第一层组合关系不为空第一层组合关系不为空 第二层不为空第一层组合关系为空 第二层不可用,并且清空第二层组合关系为空 第三层不可用并且清空

参考代码:

Private Sub Combo3_Click(Index As Integer)'判断组合关系,只有选了组合关系,相应的选项才能用'第一个组合关系不为空的时候If Trim(Combo3(0).Text) = "与" Or Trim(Combo3(0).Text) = "或" Then'第二层的选项可用Combo1(1).Enabled = TrueCombo2(1).Enabled = TrueText1(1).Enabled = TrueEnd If'第一个组关系不为空,且第二个组合关系不为空的时候If Not Trim(Combo3(0).Text) = "" ThenIf Trim(Combo3(1).Text) = "与" Or Trim(Combo3(1).Text) = "或" Then'第三层的选项可用Combo1(2).Enabled = TrueCombo2(2).Enabled = TrueText1(2).Enabled = TrueEnd IfEnd If'第一个组合关系为空,第二层选项不可用,且要清空If Trim(Combo3(0).Text) = "" ThenCombo1(1).Enabled = FalseCombo2(1).Enabled = FalseText1(1).Enabled = FalseCombo1(1).Text = ""Combo2(1).Text = ""Text1(1).Text = ""End If'第二个组合关系为空,第三层选项不可用,且要清空If Trim(Combo3(1).Text) = "" ThenCombo1(2).Enabled = FalseCombo2(2).Enabled = FalseText1(2).Enabled = FalseCombo1(2).Text = ""Combo2(2).Text = ""Text1(2).Text = ""End IfEnd Sub

4.查询逻辑

一:不用组合关系(下图)

第一层从表中提取信息如果选项内容为空,提示信息要完善不为空,判断是否有数据无数据,提示无数据有数据,调用添加函数记录集关闭

二:使用一个组合关系(下图)

从表中提取数据判断前两层选项是否有空判断组合关系与或判断数据库中是否有该数据调用添加函数释放记录集

三:用到两个组合关系(下图)

从表中提取数据判断前三层是否有空组合关系判断两个组合关系都是 与判断数据库中是否有该数据,调用添加函数,记录集释放第一个是与 第二个是或判断数据库中是否有该数据,调用添加函数,记录集释放第一个是或 第二个是与判断数据库中是否有该数据,调用添加函数,记录集释放两个组合关系都是 或判断数据库中是否有该数据,调用添加函数,记录集释放

组合查询,参考代码

'点击查询,考虑组合关系'combo1是第一列的字段,combo运算符,'text1是查询内容,combo3是组合关系Private Sub cmdInquire_Click()' Dim mrc As ADODB.Recordset' Dim strtxtSQL As String' Dim MsgText As String'从值班表中提取信息,具体选择条件在下面出现strtxtSQL = "select * from worklog_Info where "'一:当不使用组合关系。If Combo3(0).Text = "" Then'判断选项是否为空,第一层选项为空时If Trim(Combo1(0).Text) = "" Or Trim(Combo2(0).Text) = "" Or Trim(Text1(0).Text) = "" ThenMsgBox "请将选项内容填写完整!", vbOKOnly + vbExclamation, "警告"Exit SubElse '第一层选项均不为空时,sql语句完整strtxtSQL = strtxtSQL & filename(Combo1(0).Text) & " " & Combo2(0).Text & "'" & Text1(0).Text & "'"Set mrc = ExecuteSQL(strtxtSQL, MsgText)'判断数据库。数据库中没有该数据时If mrc.EOF ThenMsgBox "无该条数据,请重新选择!", vbOKOnly + vbExclamation, "警告"Text1(0).SetFocusText1(0).Text = ""myflexgrid.ClearCall jiazaiExit SubElseCall tianjia '调用添加函数,将信息加载给myflexgridEnd IfEnd IfEnd IfSet mrc = Nothing '释放mrc记录集'二:使用第一个组合关系'从表中提取数据strtxtSQL = "select * from worklog_Info where " 'where 后少一个空格'第一个组合关系不为空If Not Trim(Combo3(0).Text) = "" Then'判断前两层的选项是否有空If Trim(Combo1(0).Text) = "" Or Trim(Combo2(0).Text) = "" Or Trim(Text1(0).Text) = "" _Or Trim(Combo1(1).Text) = "" Or Trim(Combo2(1).Text) = "" Or Trim(Text1(1).Text) = "" ThenMsgBox "请将选项内容填写完整!", vbOKOnly + vbExclamation, "警告"Exit SubElse'如果组合关系为“与”If Combo3(0).Text = "与" ThenstrtxtSQL = strtxtSQL & filename(Combo1(0).Text) & " " & Trim$(Combo2(0).Text) & "'" & Trim(Text1(0).Text) & "'" _& " " & "and" & " " & filename(Combo1(1).Text) & " " & Trim(Combo2(1).Text) & "'" & Text1(1).Text & "'"Set mrc = ExecuteSQL(strtxtSQL, MsgText)If mrc.EOF ThenMsgBox "无该条记录,请重新选择!", vbOKOnly + vbExclamation, "警告"Text1(1).SetFocusText1(1).Text = ""myflexgrid.ClearCall jiazaiExit SubElseCall tianjiaEnd If'如果组合关系为“或”ElsestrtxtSQL = strtxtSQL & filename(Combo1(0).Text) & " " & Trim$(Combo2(0).Text) & "'" & Trim(Text1(0).Text) & "'" _& " " & "or" & " " & filename(Combo1(1).Text) & " " & Trim(Combo2(1).Text) & "'" & Text1(1).Text & "'"Set mrc = ExecuteSQL(strtxtSQL, MsgText)'判断数据库中是否有该数据'如果没有该数据If mrc.EOF ThenMsgBox "无该条记录,请重新选择!", vbOKOnly + vbExclamation, "警告"Text1(1).SetFocusText1(1).Text = ""myflexgrid.ClearCall jiazaiExit SubElse '如果有该数据Call tianjia '调用添加函数End IfEnd IfEnd IfSet mrc = Nothing '释放记录集End If'三:使用两个组合关系,涉及三层选项'从表中提取数据strtxtSQL = "select * from worklog_Info where "If Not Trim(Combo3(1).Text) = "" Then'判断前两层的选项是否有空If Trim(Combo1(0).Text) = "" Or Trim(Combo2(0).Text) = "" Or Trim(Text1(0).Text) = "" _Or Trim(Combo1(1).Text) = "" Or Trim(Combo2(1).Text) = "" Or Trim(Text1(1).Text) = "" _Or Trim(Combo1(2).Text) = "" Or Trim(Combo2(2).Text) = "" Or Trim(Text1(2).Text) = "" ThenMsgBox "请将选项内容填写完整!", vbOKOnly + vbExclamation, "警告"Exit SubElse'两个组合关系均为“与”时If Combo3(0).Text = "与" And Combo3(1).Text = "与" ThenstrtxtSQL = strtxtSQL & filename(Combo1(0).Text) & " " & Trim$(Combo2(0).Text) & "'" & Trim(Text1(0).Text) & "'" _& " " & "and" & " " & filename(Combo1(1).Text) & " " & Trim(Combo2(1).Text) & "'" & Trim(Text1(1).Text) & "'" & " " & _"and" & " " & filename(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"Set mrc = ExecuteSQL(strtxtSQL, MsgText)If mrc.EOF Then '91错误,未定义MsgBox "无该条记录,请重新选择!", vbOKOnly + vbExclamation, "警告"Text1(2).SetFocusText1(2).Text = ""myflexgrid.ClearCall jiazaiExit SubElseCall tianjiaEnd IfEnd If'一个组合关系为“与”,一个组合关系为“或”If Combo3(0).Text = "与" And Combo3(1).Text = "或" ThenstrtxtSQL = strtxtSQL & filename(Combo1(0).Text) & " " & Trim$(Combo2(0).Text) & "'" & Trim(Text1(0).Text) & "'" _& " " & "and" & " " & filename(Combo1(1).Text) & " " & Trim(Combo2(1).Text) & "'" & Trim(Text1(1).Text) & "'" & " " & _"or" & " " & filename(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"Set mrc = ExecuteSQL(strtxtSQL, MsgText)If mrc.EOF ThenMsgBox "无该条记录,请重新选择!", vbOKOnly + vbExclamation, "警告"Text1(2).SetFocusText1(2).Text = ""myflexgrid.ClearCall jiazaiExit SubElseCall tianjiaEnd IfEnd If'一个组合关系为“或”,一个组合关系为“与”If Combo3(0).Text = "或" And Combo3(1).Text = "与" ThenstrtxtSQL = strtxtSQL & filename(Combo1(0).Text) & " " & Trim$(Combo2(0).Text) & "'" & Trim(Text1(0).Text) & "'" _& " " & "or" & " " & filename(Combo1(1).Text) & " " & Trim(Combo2(1).Text) & "'" & Trim(Text1(1).Text) & "'" & " " & _"and" & " " & filename(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"Set mrc = ExecuteSQL(strtxtSQL, MsgText)If mrc.EOF ThenMsgBox "无该条记录,请重新选择!", vbOKOnly + vbExclamation, "警告"Text1(2).SetFocusText1(2).Text = ""myflexgrid.ClearCall jiazaiExit SubElseCall tianjiaEnd IfEnd If'两个组合关系都为“或”时If Combo3(0).Text = "或" And Combo3(1).Text = "或" ThenstrtxtSQL = strtxtSQL & filename(Combo1(0).Text) & " " & Trim$(Combo2(0).Text) & "'" & Trim(Text1(0).Text) & "'" _& " " & "or" & " " & filename(Combo1(1).Text) & " " & Trim(Combo2(1).Text) & "'" & Trim(Text1(1).Text) & "'" & " " & _"or" & " " & filename(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"Set mrc = ExecuteSQL(strtxtSQL, MsgText)If mrc.EOF ThenMsgBox "无该条记录,请重新选择!", vbOKOnly + vbExclamation, "警告"Text1(2).SetFocusText1(2).Text = ""myflexgrid.ClearCall jiazaiExit SubElseCall tianjiaEnd IfEnd IfSet mrc = NothingEnd If End IfEnd Sub

与其在那里苦苦挣扎,碍于面子硬撑,倒不如微笑着面对,

王璐 廊坊师范学院信息技术提高班 十二期

相关文章:

你感兴趣的文章:

标签云: