设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 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 分享分享 分享淘帖 订阅订阅
2#
发表于 2007-12-27 19:53:23 | 只看该作者
一定打了不少字,支持一下,呵呵

点击这里给我发消息

3#
 楼主| 发表于 2007-12-27 20:22:29 | 只看该作者
原帖由 cuxun 于 2007-12-27 18:26 发表
哈哈,支持,第一次见中文的函数有点亲切感


要的就是这种效果,给不懂代码的人容易理解

原帖由 Victor_Duane 于 2007-12-27 19:53 发表
一定打了不少字,支持一下,呵呵


变量名打一次,然后就复制

点击这里给我发消息

4#
发表于 2007-12-27 20:33:38 | 只看该作者
小宝 出招 中西合壁 简明易懂
5#
发表于 2007-12-27 23:24:29 | 只看该作者
学习一下哦。。。。。。

点击这里给我发消息

6#
 楼主| 发表于 2007-12-28 20:50:18 | 只看该作者
此函数在一楼的基础上作了更新,主要是改变了组合查询条件字符的方式,增加了关系参数,多条件之间的关系可以选择"与"或"或"。2007-12-30再次修改:表名和字段名加上 [ ] 号,防止表名和字段中间有空格。

Public Function 模糊搜索(数据源 As String, Optional 条件 As String, Optional 关系 As Boolean) As String
''=================================================================================
'' 函数说明:
'' 此函数执行成功则返回一个包含全字段模糊查询条件的查询语句,否则返回一个空字符串。
'' 参数说明:
'' 数据源 参数: 必填 可以是表名、查询名、SQL语句
'' 条件   参数: 可选 可以是任何字符,多个条件用空格隔开
'' 关系   参数: 可选 为真假值,确定多个条件之间的关系,为真关系是"or",为假关系是"and"
'' 使用示例:
'' Me.列表框1.RowSource = 模糊搜索("人员表", Me.文本1)
'' Me.子窗体.Form.RecordSource = 模糊搜索("Select * From 人员表", "张小 大力 001",true)
'
'' 设计:t小宝
'' 创建日期:2007-12-27
'' 更新日期:2007-12-30
''==================================================================================
On Error GoTo Err1
Dim dbs As dao.Database
Dim r字段 As dao.Recordset
Dim stsql As String
Dim s数组() As String
Dim s字段 As String
Dim s条件 As String
Dim s关系 As String
Dim i条件 As Integer
Dim i As Integer
Dim i1 As Integer

If Len(数据源) = 0 Then                                                            ' 不输入数据源,退出
    Exit Function
End If

' 转换数据源参数为SQL语句
If InStr(1, 数据源, "select", 1) = 0 Then                                           ' 如果数据源是查询语句
    stsql = "Select * From [" & 数据源 & "] "
Else                                                                                               ' 数据源是表名或查询名称
    stsql = "Select * From (" & 数据源 & ") As a "
End If

s条件 = Trim(条件)
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                                                   ' 循环组合条件字段
        s字段 = s字段 & "[" & .Fields(i).Name & "] & ' ' & "
    Next
    .Close
End With
s字段 = Left(s字段, Len(s字段) - 8)                                              ' 去掉后面多余的字符

' 关系字符
If 关系 Then
    s关系 = "*' or "
Else
    s关系 = "*' and "
End If

For i1 = 0 To i条件                                                                           ' 循环条件
    模糊搜索 = 模糊搜索 & s字段 & "Like'*" & s数组(i1) & s关系        ' 组合字段和条件
Next
模糊搜索 = " Where " & Left(模糊搜索, Len(模糊搜索) - 4)               ' 去掉后面多余的字符,加上" Where "
模糊搜索 = stsql & 模糊搜索

Set r字段 = Nothing
Set dbs = Nothing

Exit1:
    Exit Function
Err1:
    模糊搜索 = ""
    MsgBox Err.Description, vbExclamation, "发生错误"
    Resume Exit1
End Function

[ 本帖最后由 t小宝 于 2007-12-30 14:12 编辑 ]
7#
发表于 2007-12-30 11:29:16 | 只看该作者
好东西,没什么会沉在这下面

点击这里给我发消息

8#
 楼主| 发表于 2007-12-30 14:13:17 | 只看该作者
7楼函数再次修改:表名和字段名加上 [ ] 号,防止表名和字段中间有空格。
9#
发表于 2008-8-20 21:52:55 | 只看该作者
能说说在窗体中怎么调用 吗?????[:30] [:31]
10#
发表于 2009-3-11 21:33:48 | 只看该作者
要有实例就好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-24 13:11 , Processed in 0.098383 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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