先来说说我们普遍存在的一种心理,就是我们看到组合查询的那个界面的时候我们当时就被自己给打死了,我们的第一反应就是这是个什么东西,这么多的框框,所以就给组合查询蒙上了一层 “很难”的面纱,但是当我们仔细想想我们好像在那见过这样的知识。仔细想想,,,,,,终于在记忆深处找到了一点安慰,那就是学生信息管理系统中的这个界面(回忆旧识):
相当这我们的心情应该大好啊!这就给我们提供了很好的思路,这就是个小组合查询啊。下面说说我的组合查询思路:
最后两个组合框是选择组合关系的(与 或),同时在我的代码中它们关系着它们下面的控件是否可以为空。也就是说如果我们查询的包含一个条件,我们应该填写在第一行中,如果我们选择了一个组合关系的文本框中,那么下面的控件框就不能为空,具体代码如下:
txtSQL = "select * from line_Info where " '判断字段的选择是否为空 If combfiled(0).Text = "" Then MsgBox "请选择字段!", vbOKOnly + vbExclamation, "警告" combfiled(0).SetFocus Exit Sub End If '判断操作符的选择是否为空 If comboperate(0).Text = "" Then MsgBox "请选择操作符!", vbOKOnly + vbExclamation, "警告" comboperate(0).SetFocus Exit Sub End If '判断要查询的内容是否为空 If txtcontent(0).Text = "" Then MsgBox "请在输入要查询的内容", vbOKOnly + vbExclamation, "警告" txtcontent(0).SetFocus Exit Sub End If txtSQL = txtSQL & ZhuangHuan(combfiled(0).Text) & " " & comboperate(0).Text & "'" & txtcontent(0).Text & "'" '利用模版函数查看是否是组合查询第一行为空时,查询无效 '开始组合查询 If Trim(combrelation(0).Text <> "") Then If Trim(combfiled(1).Text) = "" Or Trim(comboperate(1).Text) = "" Or Trim(txtcontent(1).Text) = "" Then MsgBox "您选择了组合关系,请输入数据之后再查询", vbOKOnly, "提示信息" Exit Sub Else txtSQL = txtSQL & ZhuangHuan(combrelation(0).Text) & " " & ZhuangHuan(combfiled(1).Text) & comboperate(1).Text & "'" & Trim(txtcontent(1).Text) & "'" End If End If If Trim(combrelation(1).Text) <> "" Then If Trim(combfiled(2).Text) = "" Or Trim(comboperate(2).Text) = "" Or Trim(txtcontent(2).Text) = "" Then MsgBox "您选择了第二个组合,请输入数据之后在查询", vbOKOnly, "提示" Exit Sub Else txtSQL = txtSQL & ZhuangHuan(combrelation(1).Text) & " " & ZhuangHuan(combfiled(2).Text) & comboperate(2).Text & "'" & Trim(txtcontent(2).Text) & "'" End If End If '开始进行查找 Set mrc = ExecuteSQL(txtSQL, MsgText)到这我们的查询的主要代码就可以了。
当然这样我们的代码还是不能运行,因为我们的组合框中是填写的汉字所以我们需要一个转换函数,把我们控件框中的汉字转换成符号.
Public Function ZhuangHuan(StrZhuangHuan As String) As String Select Case StrZhuangHuan Case "卡号" ZhuangHuan = "cardno" Case "姓名" ZhuangHuan = "studentname" Case "上机日期" ZhuangHuan = "ondate" Case "上机时间" ZhuangHuan = "ontime" Case "下机日期" ZhuangHuan = "offdate" Case "下机时间" ZhuangHuan = "offtime" Case "消费金额" ZhuangHuan = "consume" Case "余额" ZhuangHuan = "cash" Case "与" ZhuangHuan = "and" Case "备注" ZhuangHuan = "status" Case "或" ZhuangHuan = "or" End Select End Function下面是我们这个窗体中一些需要我们在优化的时候需要注意的事情,像我们在按日期查询的时候,我们的格式必须正确,如果不按正确的格式就会报错。这就需要下面的代码来给我们增加提示:
'判断日期和时间的格式是否正确 If combfiled(0).Text = "上机日期" Or combfiled(0).Text = "上机时间" Or combfiled(0).Text = "下机日期" Or combfiled(0).Text = "下机时间" Then If Not IsDate(txtcontent(0).Text) Then MsgBox "请输入正确的日期或时间格式", vbOKOnly + vbExclamation, "提示" Exit Sub End If End If If combfiled(1).Text = "上机日期" Or combfiled(1).Text = "上机时间" Or combfiled(1).Text = "下机日期" Or combfiled(1).Text = "下机时间" Then If Not IsDate(txtcontent(1).Text) Then MsgBox "请输入正确的日期或时间格式", vbOKOnly + vbExclamation, "提示" Exit Sub End If End If If combfiled(2).Text = "上机日期" Or combfiled(2).Text = "上机时间" Or combfiled(2).Text = "下机日期" Or combfiled(2).Text = "下机时间" Then If Not IsDate(txtcontent(2).Text) Then MsgBox "请输入正确的日期或时间格式", vbOKOnly + vbExclamation, "提示" Exit Sub End If End If这还有一个很重要的问题值得我们了解:就是当我们查询卡号的时候当我们输入的内容是一位数的时候,我们总是能查出我们需要的正确的结果,但是当我们输入多位数的时候就会出错了,比如下面这种情况:
当我们查询的条件是小于3的时候,像12 24等第一位小于3的所有数都会出现:出现这种问题的原因是:卡号是字符型的数据,在比较的时候比的是ASCII码的的大小,并且只要有好符合条件的数字就不会再往后比较。其余的就是一些很小的问题,需要我们自己细心的修改。
小结:
其实当我们有了学生中的那个基础,到这我们就可以用一句话来概括,就是字符串 的拼接,之中出现的错误没有什么难的逻辑错误,都是我们的SQL语句出现错误,只有我们有足够的耐心和细心,我们会很轻松的搞定这个问题。