设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 28916|回复: 90
打印 上一主题 下一主题

[查询] [分享]怎样更方便和快捷的设计模糊查询?

[复制链接]
跳转到指定楼层
1#
发表于 2006-7-25 03:47:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
游客,如果您要查看本帖隐藏内容请回复



做这种查询最重要的就是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 '*" & _

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
2#
发表于 2006-7-25 04:05:00 | 只看该作者
谢谢fan0217为我们提供了这么好的函数。已收藏。
3#
 楼主| 发表于 2006-7-25 04:37:00 | 只看该作者
该函数的又一应用:

列表框复选查询

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

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

希望能解答!急着用,谢谢![em02]
9#
发表于 2006-7-29 07:57:00 | 只看该作者
谢谢分享
10#
 楼主| 发表于 2006-7-29 07:59:00 | 只看该作者
那个函数还有待改进。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-16 01:46 , Processed in 0.102019 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表