Office中国论坛/Access中国论坛

标题: [分享]怎样更方便和快捷的设计模糊查询? [打印本页]

作者: fan0217    时间: 2006-7-25 03:47
标题: [分享]怎样更方便和快捷的设计模糊查询?



做这种查询最重要的就是SQL语句的WHERE子句的设置,特别是单字段多关键字的时候,设置Where子句就比较难了。在此提供的一个函数可以很好的解决这个问题。相信对ASP中设计网络搜索引擎的熟悉的朋友,对下面的代码不会陌生,这个函数就是吸收了网络搜索引擎的代码而成的。关键字之间一般使用逗号、分号(不区分全角半角)或者空格来隔开,该函数首先将关键字中的分隔符:逗号、分号替换成空格,然后根据空格进行拆分,最后通过循环生产SQL语句的Where子句,同时根据需要使用AND或OR将他们连接在一起。使用下列函数也很简单:函数CSQL("表1","字段1","A,b;C",2)将返回的SQL语句为:”SELECT * FROM [表1] WHERE ([字段1] LIKE '*A*' OR [字段1] LIKE '*b*' OR [字段1] LIKE '*C*');”
将这句SQL语句赋给子窗体的RecordSource,然后用Requery更新子窗体,就可以实现单字段多关键字查询。
函数如下:
‘定义常量
ublic Const conAND As Integer = 1
ublic Const conOR As Integer = 2

'===============================================================================
'-函数名称:     CSQL
'-功能描述:     将参数转换为模糊查询的SQL语句
'-输入参数说明: 参数1: 必选 strTable As String 表名称或者无参数的选择查询名称
'               参数2: 可选 strField As String  字段名称
'               参数3: 可选 strKeyWords As String  查询关键字
'               参数4: 可选 intOperation As Integer  运算符(常量:conAND或者1,conOR或者2)
'-返回参数说明:
'-使用语法示例: strSQL=CSQL("表1","字段1","A,b;C",conAND)
'-参考:
'-使用注意:     可使用中文的,;和英文的,;和空格来作为关键的分割符
'-兼容性:       2000,XP,2003
'-作者:         fan0217@163.com
'-更新日期:    2006-06-20
'===============================================================================
ublic Function CSQL(strTable As String, _
                    Optional strField As String, _
                    Optional strKeyWords As String = "", _
                    Optional intOperation As Integer = 1) As String
On Error GoTo Err_CSQL
Dim strSQL As String, varKWArray As Variant
Dim intMax As Integer, i As Integer, strOperation As String

If intOperation <> conAND And intOperation <> conOR Then
    MsgBox "intOperation参数设置不正确。", 16, "fan0217"
    Exit Function
End If

If strKeyWords = "" Then
    strSQL = "SELECT * FROM [" & strTable & "];"
Else
    strKeyWords = Replace(strKeyWords, ";", " ")    '将中文分号换成空格
    strKeyWords = Replace(strKeyWords, ";", " ")     '将英文分号换成空格
    strKeyWords = Replace(strKeyWords, ",", " ")    '将中文逗号换成空格
    strKeyWords = Replace(strKeyWords, ",", " ")     '将英文逗号换成空格
    strKeyWords = Trim(strKeyWords)                  '去处首尾的空格
   
    varKWArray = Split(strKeyWords)       '将字符串根据空格拆开,获得一个数组
    intMax = UBound(varKWArray)           '获取数组的最大下标
   
    If strKeyWords = "" Then
        strSQL = "SELECT * FROM [" & strTable & "];"
    Else
        strSQL = "SELECT * FROM [" & strTable & "] WHERE "
        
        If intMax = 0 Then
            strSQL = strSQL & "[" & strField & "] LIKE '*" & varKWArray(0) & "*';"
        Else
            If intOperation = conAND Then
                strOperation = " AND "
            ElseIf intOperation = conOR Then
                strOperation = " OR "
            End If
            For i = 0 To intMax
                varKWArray(i) = Trim(varKWArray(i))
                If i = 0 Then
                    strSQL = strSQL & "([" & strField & "] LIKE '*" & _
                                            varKWArray(i) & "*'" & strOperation
                ElseIf i = intMax Then
                    strSQL = strSQL & "[" & strField & "] LIKE '*" & _
                                            varKWArray(i) & "*');"
                Else
                    strSQL = strSQL & "[" & strField & "] LIKE '*" & _

作者: wuaza    时间: 2006-7-25 04:05
谢谢fan0217为我们提供了这么好的函数。已收藏。
作者: fan0217    时间: 2006-7-25 04:37
该函数的又一应用:

列表框复选查询[attach]19236[/attach]

作者: 好学    时间: 2006-7-25 09:06
好东东,谢谢![em17][em17]
作者: nzlwc_fsb    时间: 2006-7-25 15:09
学习
作者: 一点通    时间: 2006-7-25 16:42
精品,可以说是模糊查询的大集合,谢谢分享
作者: jlk88    时间: 2006-7-25 22:01
  哇,好东东!真是及时雨![em17][em17][em17]
作者: jlk88    时间: 2006-7-26 21:05
斑竹能否改造一下,变成多字段的模糊查询?比如:层级 I or II and 物料来源性 外购

希望能解答!急着用,谢谢![em02]
作者: andymark    时间: 2006-7-29 07:57
谢谢分享
作者: fan0217    时间: 2006-7-29 07:59
那个函数还有待改进。
作者: andymark    时间: 2006-7-29 08:01
能否扩展为增量查询
作者: awangyd    时间: 2006-7-29 08:03
看的我头都晕了~~~
作者: fan0217    时间: 2006-7-29 08:06
我现在将那函数更改为只返回Where的子句,取消了strTable参数,这样更灵活一些。同时可以扩展为多字段对关键字的查询。
作者: jlk88    时间: 2006-7-29 19:45
因为水平有限,麻烦版主将修改的结果传上来,谢谢!
作者: 狼书生    时间: 2006-8-4 21:23
真是好DD,收藏先![em02]
作者: qlm    时间: 2006-8-5 04:41
收藏先
作者: ameiti    时间: 2006-8-16 06:09
我也想看一下呀
作者: 205226    时间: 2006-8-16 06:20
好棒!已经收藏 !
作者: Grant    时间: 2006-8-16 06:49
很不错的做法,值得借鉴.谢谢fans又学习了.
作者: li0533    时间: 2006-8-16 16:36
好东东,谢谢!
作者: goto2008    时间: 2006-8-21 05:42
好东西啊,我找了好久,终于在这找到了。
作者: ydy123    时间: 2006-8-21 18:01
很好,谢谢
作者: zhjm2001    时间: 2006-9-2 21:47
太高兴了,我琢磨了好长时间。谢谢分享。
作者: puduhu    时间: 2006-9-28 20:38
嗯,真的很不错,拿下来用用,非常实用的说.
作者: wang1950317    时间: 2006-10-24 18:20
真是好东西!谢谢fan0217版主!
作者: kcny    时间: 2006-10-24 21:33
谢谢!
作者: Haoxu123    时间: 2007-8-23 11:07
好东东,当然要学习一下了
作者: zyz218    时间: 2007-8-23 11:15
又学到了新东东!!感谢!
作者: eyewitnes    时间: 2007-8-23 13:45
好东西,谢谢分享//
作者: sillysilly    时间: 2007-8-23 14:49
谢谢fan0217为我们提供了这么好的函数
作者: shazhe    时间: 2007-8-24 22:36
好好的学习吧很感谢谢!
作者: shazhe    时间: 2007-8-24 22:37
还有一个要下载啊没有分啊
作者: hancopy0323    时间: 2007-8-30 14:19
DING YI XIA
作者: ntqcy    时间: 2007-10-23 11:50
标题: 怎么下不了
我怎么下不了 :( :(
作者: nxjswt    时间: 2007-10-24 21:29
多字段的话也可以使用多个的文本框的组合来形成模糊查询
作者: wu8313    时间: 2007-10-26 17:22
怎么下载不了。????????
作者: t小宝    时间: 2007-10-26 23:11
谢谢分享,收藏了
作者: dqsytmh    时间: 2007-12-2 14:08
谢谢分享
学习  进一步的学习
作者: sasa1    时间: 2007-12-12 12:22
好东西一定要顶到底!
作者: REORX    时间: 2007-12-19 13:34
这个程序真的不错,感谢作者!
作者: xjliyuehua    时间: 2008-1-9 09:40
标题: xie xie

作者: 插班生    时间: 2008-1-9 11:18
:kiss:
作者: 插班生    时间: 2008-1-9 11:22
好东东,收一收!!!
作者: sblisb    时间: 2008-2-26 20:22
谢谢,不错的东东
作者: 3828688    时间: 2008-3-1 16:55
谢谢分享,已收藏。
作者: xd908    时间: 2008-3-2 17:44
谢谢分享,正需要呢
作者: REORX    时间: 2008-3-4 22:48
好东东 一定要学
作者: liaoliao    时间: 2008-7-15 11:20
原来是需要回复啊.[:45] [:45]
作者: yiwancn    时间: 2008-7-19 16:54
好东东,谢谢!
作者: liaoliao    时间: 2008-7-19 17:37
俺回还不行吗?[:41] [:41] [:41]
作者: wuminhui    时间: 2008-11-27 23:20
好东西,支持 !
作者: cashiba    时间: 2008-11-28 18:26
xuexixuexihaodongxi
作者: fjnplh    时间: 2008-11-29 01:02
好东东,谢谢![
作者: bpchan    时间: 2008-11-29 14:21
标题: 学习!!!
学习!!!!!!!
作者: cashiba    时间: 2008-11-30 20:19
tinghao de xiuexieu
作者: laosanjie    时间: 2008-11-30 21:42
学习一下,谢谢楼主分享!
作者: isbanker    时间: 2008-12-27 14:24
多谢分享[:26]
作者: htlsb    时间: 2009-1-3 22:43
可以实现在窗体的多控件模糊查询吗?比如组合框,文本框一起?
作者: dxssxd    时间: 2009-2-6 23:40
多谢分享
作者: changweiren    时间: 2009-2-7 02:02
谢谢了
作者: 7777777    时间: 2009-2-10 16:28
好东东,谢谢![em17][em17]
作者: yanwei82123300    时间: 2009-3-9 14:58
谢谢分享
作者: zzwxm98    时间: 2009-5-3 11:31
好函数收藏
作者: yujingchun    时间: 2009-7-24 18:31
学习
作者: yanwei82123300    时间: 2009-8-22 13:28
thank you
作者: 86814898    时间: 2009-9-21 16:18
看一下
作者: 86814898    时间: 2009-9-21 16:20
好用,谢谢了
作者: cfncmjh    时间: 2009-10-5 21:27
好好好
作者: chaojianan    时间: 2009-10-10 11:35
支持下fan。
作者: 86814898    时间: 2009-10-14 07:28
先收藏,谢谢
作者: juerong    时间: 2009-10-15 19:55
学习
作者: cashiba    时间: 2009-10-16 01:13
学习中,收获不浅.....
作者: chaojianan    时间: 2009-10-19 20:30
谢谢fan,收藏了。
作者: muning2009    时间: 2009-11-17 20:04
大大,学习学习啊
作者: lp2lp2    时间: 2009-11-24 15:00
学习下
作者: yuchengzh    时间: 2009-12-4 13:23
好东西
作者: tony182838    时间: 2009-12-27 20:39
赶紧下载看看,我正为单字段多条件查询犯愁呢
作者: yihesmxx    时间: 2010-1-13 11:49
学习学习
作者: luhao    时间: 2010-1-13 12:09
t8 r55
作者: 66364936    时间: 2010-1-28 12:41
谢谢分享
作者: ZHENGLIAN    时间: 2010-8-18 19:00
对下面的代码不会陌生,这个函数就是吸收了网络搜索引擎的代码而成的
作者: ZHENGLIAN    时间: 2010-8-18 19:07
多表,,多字段查询更好
作者: xie62    时间: 2010-8-21 14:42
谢谢分享
作者: TWH852002    时间: 2011-12-1 10:09

作者: h150085001    时间: 2011-12-16 14:58
学习了
作者: shuix    时间: 2012-1-27 10:17
谢谢分享,怎么是乱码呀
作者: kpsimon    时间: 2012-2-9 01:41
谢谢分享
作者: slyz974    时间: 2013-7-11 21:23
谢谢分享
作者: xlb004    时间: 2016-7-6 14:04
11111111111
作者: xiaowuo2    时间: 2016-7-6 16:59
好东东,下载收藏先
作者: Dtsan    时间: 2017-12-27 18:43
案例收藏了,确实经典,谢谢楼主




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3