【VB】SQL模糊查询和组合查询(机房问题)

来源:互联网 发布:linux下无线网卡驱动 编辑:程序博客网 时间:2024/05/11 05:49

在机房里,有三个窗体涉及到了组合查询,几乎可以用完全相同的代码。在这里,我以”操作员工作记录“为例介绍模糊查询和组合查询。

模糊查询,顾名思义,就是模糊查询数据库中数据,何为模糊呢?就是不给出准确的查询条件。例如:

    txtSQL = "select * from worklog_Info where "
这就是在模糊的查询worklog表数据。

什么又是组合查询呢?

组合查询的原理相当于多条件查询(参考我的博客SQL多条件查询),但又不同于多条件查询,组合查询是自己选择查询条件以及组合条件,然后将数据库中符合条件的语句查询出来。同样以“操作员工作记录”为例:


关键位置在哪?对,没错,就是最后的组合关系。

我敲这部分代码的时候是围绕组合关系展开的,在这里,组合查询可以有多种逻辑,我认为从这下手比较简单。

组合关系里只有”与“和”或“两种情况,两个选择框就是四种情况,1、2都空,1不空2空,1空2不空,1、2都不空。

首先,1、2都空的时候,就是只查询第一行;1不空2空是查询前两行;1空2不空是查询后两行;1、2都不空是查询三行。这样写囊括了全部可能出现的情况。

条件选择语句当然要以判断组合关系combo是否为空。

逻辑分析好了,然后来做前期工作。因为这是一个需要自己填入查询关键字、查询条件、查询内容以及查询组合关系的功能窗体。所以,我们要先把SQL不可识别的关键字转换为SQL可以识别的关键字。

在这里有两种方法。

1、select case法

就是定义一个自定义转换函数:

Public Function field(strfilename As String) As String    Select Case strfilename        Case "教师"            field = "UserID"        Case "注册日期"            field = "LoginDate"        Case "注册时间"            field = "LoginTime"        Case "注销日期"            field = "LogoutDate"        Case "注销时间"            field = "LogoutTime"        Case "机器名"            field = "computer"        Case "与"            field = "and"        Case "或"            field = "or"    End SelectEnd Function

然后,在写组合查询语句的时候。

查询第一行:

    txtSQL = "select * from worklog_Info where "
    txtSQL = txtSQL & field(字段1.Text) & Trim(操作符1.Text) & "'" & Trim(关键字1.Text) & "'"
查询前两行:

    txtSQL = txtSQL & field(组合1.Text) & " " & field(字段2.Text) & 操作符2.Text & "'" & Trim(关键字2.Text) & "'"
查询三行:

    txtSQL = txtSQL & field(组合2.Text) & " " & field(字段3.Text) & 操作符3.Text & "'" & Trim(关键字3.Text) & "'"
其中,field就是自定义的函数,它能将”组合“和”字段“中的如”与“和”教师“转换成SQL可识别的”and“和”UserID“。那为什么操作符不用转换呢,因为操作符本身就是SQL可识别的”=“,”<>“,”>“以及”<“。


2、If语句转换法(在对应combo的click事件中写,使用数组比较好,省时省力省代码。)

    If comboField = "教师" Then comboField.Tag = "UserID"    If comboField = "注册日期" Then comboField.Tag = "LoginDate"    If comboField = "注册时间" Then comboField.Tag = "LoginTime"    If comboField = "注销日期" Then comboField.Tag = "LogoutDate"    If comboField = "注销时间" Then comboField.Tag = "LogoutTime"    If comboField = "机器名" Then comboField.Tag = "computer"
然后,在组合查询时,类似于上一种方法。

查询第一行:

    txtSQL = "select * from worklog_Info where "
    txtSQL = txtSQL & 字段1.Tag & Trim(操作符1.Text) & "'" & Trim(关键字1.Text) & "'"
查询第二行:

    txtSQL = txtSQL & 组合1.Tag & " " & 字段2.Tag & Trim(操作符2.Text) & "'" & Trim(关键字2.Text) & "'"
查询第三行:

    txtSQL = txtSQL & 组合2.Tag & " " & 字段3.Tag & Trim(操作符3.Text) & "'" & Trim(关键字3.Text) & "'"
和第一种方法不同的是,在需要转换的地方是用的.Tag。对应到if语句中,完成了转换。


组合查询的总体思想以及部分代码就是这些,还有需要注意的是验证输入框是否为空,数据库是否为空的这些优化上面了。


0 0