您的位置:首页 > 其它

学生上机信息统计——对两张表的联合查询

2013-11-08 15:22 218 查看


 

   在学生上机信息统计中,

  此处,因为要查询两张表,而且两张表查询的先后有时要严格表明,所以,在查询时,有两种思路:
 
   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 语句:



 
虽然看起来有点复杂,但是基本东西都是一样的。

 
 
 
 
 
 
 
 
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: