在学生上机信息统计中,
此处,因为要查询两张表,而且两张表查询的先后有时要严格表明,所以,在查询时,有两种思路:
1,定义两个Recordset对象,并根据字段,判断是先查询学生信息表,还是先查询学生上机表
2,两张表有一个共同的字段:卡号,所以,可以根据卡号将两张表连起来查询,这样比较方便。
因为第一种方式比较复杂,容易出错,所以,我选择了第二种方式,将两张表联合起来。
下面是对两张表联合起来的查询的语句:
查询结果如下:
但是,,实际的时候,用户进行的查询都是有条件的查询,所以,在SQL 语句中还应加上条件。
但是卡号因为在两张表中都存在,所以在查询时,如果不指定是哪张表,会出现不明确的问题,导致查询无法进行。所以,在用卡号作为条件时,应该在卡号前面指定表明,以表明是对哪张表的卡号进行查询。。
另外,在查询时,因为并不是所有列的信息我们都要显示给用户,所以,可以指定返回的列:
select Stubaseinfo.卡号,姓名,上机日期,上机时间,下机日期,下机时间,消费金额,金额 from StuBaseInfo ,StuShangJi where StuBaseInfo .卡号=StuShangJi.卡号 and 姓名='刘慧超'
组合查询的过程:
1,输入值的非空和完整性验证
2,将查询时输入的条件字符转换成数据库的字段名
3,分别对一个字段,两个字段,三个字段,这三种情况编写SQL语句
下面是我的部分代码:
'查询之前先清空表格结构 myFlexGrid.ClearStructure '如果第一个与或没有选择,下面的文本框都不可用 '同理,如果第二个文本框没有选择的话,下面的文本框也都不可用 '这一检查放在了两个change事件里面 '只有一个查询条件时,只能用第一条;如果有两个查询条件时,只能用前两条; ' 查询前,先进行非空判断 '先判断有三个查询条件的情况 If Testtxt(Cmb1.Text) = True And Testtxt(Cmb2.Text) = True Then If Testtxt(CmbZiDuan1.Text) = False Or Testtxt(CmbZiDuan2.Text) = False Or Testtxt(CmbZiDuan3.Text) = False Then '如果三个字段名中有一个为空的话,提示字段名为空 MsgBox "字段名不能为空!", vbOKOnly + vbExclamation, "警告" '提示字段名不能为空 Exit Sub ElseIf Testtxt(CmbCaoZuo1.Text) = False Or Testtxt(CmbCaoZuo2.Text) = False Or Testtxt(CmbCaoZuo3.Text) = False Then '如果操作符为空 MsgBox "操作符不能为空!", vbOKOnly + vbExclamation, "警告" '如果操作符为空 Exit Sub Else If Testtxt(txtCheck1.Text) = False Or Testtxt(txtCheck2.Text) = False Or Testtxt(txtCheck3.Text) = False Then '如果要查询的内容有一个为空的话 MsgBox "查询内容不能为空!", vbOKOnly + vbExclamation, "警告" '如果查询内容为空 Exit Sub End If End If '将组合关系转换成数据库可识别的字符 If Trim(Cmb1.Text) = "与" Then '转换组合关系1的字符 ZuHe1 = "and" Else ZuHe1 = "or" End If If Trim(Cmb2.Text) = "与" Then '转换组合关系2的字符 ZuHe2 = "and" Else ZuHe2 = "or" End If '将操作符转换为数据库可识别内容,,嘿嘿,不知道大家看不看得出金额和余额...... If CmbZiDuan1.Text = "余额" Then CmbZiDuan1.Text = "金额" End If If CmbZiDuan2.Text = "余额" Then CmbZiDuan2.Text = "金额" End If If CmbZiDuan3.Text = "余额" Then CmbZiDuan3.Text = "金额" End If '查询前先判断字段是否是卡号,然后根据卡号分情况执行SQL语句 If CmbZiDuan1.Text = "卡号" Then '为卡号指定一个表名 KaHao1 = "stushangji.卡号" Else KaHao1 = CmbZiDuan1.Text End If If CmbZiDuan2.Text = "卡号" Then '如果查询的字段为卡号,则必须为卡号指定一个表名 KaHao2 = "stushangji.卡号" Else KaHao2 = CmbZiDuan2.Text End If If CmbZiDuan3.Text = "卡号" Then '如果查询的字段为卡号,则必须为卡号指定一个表名 KaHao3 = "stushangji.卡号" Else KaHao3 = CmbZiDuan3.Text End If '执行查询 SQL = "select Stushangji.卡号,姓名,上机日期,上机时间,下机日期,下机时间,消费金额,金额 from stubaseinfo,stushangji where (StuBaseInfo.卡号=StuShangJi.卡号) and (" & KaHao1 & Trim(CmbCaoZuo1.Text) & "'" & Trim(txtCheck1.Text) & "'" & " " & ZuHe1 & " " & KaHao2 & Trim(CmbCaoZuo2.Text) & "'" & Trim(txtCheck2.Text) & "'" & " " & ZuHe2 & " " & KaHao3 & Trim(CmbCaoZuo3.Text) & "'" & Trim(txtCheck3.Text) & "')" Set Rst = ExecuteSQL(SQL, strMsg) '执行查询 End If
下面是一个运行时的SQL 语句:
虽然看起来有点复杂,但是基本东西都是一样的。