设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 6501|回复: 16
打印 上一主题 下一主题

[查询] 一个全字段多条件模糊查询函数

[复制链接]

点击这里给我发消息

跳转到指定楼层
#
发表于 2007-12-27 17:32:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
请各位测试并提出宝贵意见
在7楼已有更新
Public Function 模糊搜索(数据源 As String, 条件 As String) As String
''=================================================================================
'' 函数说明:
'' 此函数执行成功则返回一个包含全字段模糊查询条件的查询语句,
'' 可以作为窗体数据源、列表框的行来源、查询的SQL语句。
'' 参数说明:
'' 数据源 参数: 必填 可以是表名、查询名、SQL语句
'' 条件   参数: 必填 可以是任何字符,多个条件用空格隔开
'' 使用示例:
'' Me.列表框1.RowSource = 模糊搜索("人员表", Me.文本1)
'' Me.子窗体.Form.RecordSource = 模糊搜索("Select * From 人员表", "张小 大力 韦 001")
'
'' 设计:t小宝 于2007-12-27
''================================================================================
Dim dbs As dao.Database
Dim r字段 As dao.Recordset
Dim stsql As String
Dim s数组() As String
Dim s条件 As String
Dim i条件 As Integer
Dim i As Integer
Dim i1 As Integer
s条件 = Trim(条件)
If Len(数据源) = 0 Then                                                             ' 不输入数据源,退出
    Exit Function
End If
' 转换数据源参数为SQL语句
If InStr(1, 数据源, "select ", 1) = 0 Then                                          ' 如果数据源是查询语句
    stsql = "Select * From (Select * From " & 数据源 & ") As a "
Else                                                                                ' 数据源是表名或查询名称
    stsql = "Select * From (" & 数据源 & ") As a "
End If
If Len(s条件) = 0 Then                                                              ' 不输入条件
    模糊搜索 = stsql
    Exit Function
End If
' 清除条件中多余的空格,转换为数组
Do Until InStr(1, s条件, "  ", 0) = 0
    s条件 = Replace(s条件, "  ", " ")                                                ' 用一个空格替换两个空格
Loop
s数组 = Split(s条件)
i条件 = UBound(s数组)
' 循环组合字段条件
Set dbs = CurrentDb
Set r字段 = dbs.OpenRecordset(stsql & " Where False")
With r字段
    For i = 0 To .Fields.Count - 1                                                    ' 循环字段
        For i1 = 0 To i条件                                                           ' 循环条件
            模糊搜索 = 模糊搜索 & .Fields(i).Name & " Like '*" & s数组(i1) & "*' or " ' 组合字段和条件
        Next
    Next
    .Close
End With
Set r字段 = Nothing
Set dbs = Nothing
模糊搜索 = " Where " & Left(模糊搜索, Len(模糊搜索) - 3)                              ' 去掉最后面的 "or ",加上" Where "
模糊搜索 = stsql & 模糊搜索
End Function

[ 本帖最后由 t小宝 于 2007-12-28 20:52 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
16#
发表于 2014-12-7 21:24:59 | 只看该作者
thl   

点击这里给我发消息

15#
发表于 2014-7-25 10:32:01 | 只看该作者
收藏起来,不会代码真可怜。
14#
发表于 2010-3-17 19:04:56 | 只看该作者
好东西啊,谢谢分享!
13#
发表于 2009-10-15 14:47:48 | 只看该作者
好东西啊,谢谢分享!
12#
发表于 2009-10-14 20:58:12 | 只看该作者
谢谢收藏了。
11#
发表于 2009-5-3 11:25:37 | 只看该作者
要的就是这种效果,给不懂代码的人容易理解
10#
发表于 2009-3-11 22:00:17 | 只看该作者
想看个样板
9#
发表于 2009-3-11 21:33:48 | 只看该作者
要有实例就好了。
8#
发表于 2008-8-20 21:52:55 | 只看该作者
能说说在窗体中怎么调用 吗?????[:30] [:31]

点击这里给我发消息

7#
 楼主| 发表于 2007-12-30 14:13:17 | 只看该作者
7楼函数再次修改:表名和字段名加上 [ ] 号,防止表名和字段中间有空格。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-24 15:20 , Processed in 0.101724 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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