设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[查询] 这样的模糊查询怎么做啊?

[复制链接]
跳转到指定楼层
1#
发表于 2013-4-24 08:57:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
将符合给定条件内容百分之7、80的记录筛选出来,如:给定条件为,我是男人,被筛选记录为:1、我是中国人,2、我是女人,3、我是工程师,4、他是德国人。复合模糊查询条件的结果为:1、2
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2013-4-24 09:42:23 | 只看该作者
1、我是中国人,2、我是女人  =我是男人?
不是很明白意思 啊
3#
发表于 2013-4-24 14:00:07 | 只看该作者
搜索思路就不对,应该用多个关键字来查询,例如可以使用   我,是,人  来查询符合要求的记录。这种样例很多啊。
4#
发表于 2013-4-24 14:05:58 | 只看该作者
zww3008 发表于 2013-4-24 14:00
搜索思路就不对,应该用多个关键字来查询,例如可以使用   我,是,人  来查询符合要求的记录。这种样例很多啊 ...

这样没有搜索出来的就是"我不是人"
5#
发表于 2013-4-24 14:17:38 | 只看该作者
Henry D. Sy 发表于 2013-4-24 14:05
这样没有搜索出来的就是"我不是人"

不会啊,我是说分别用三个关键字,“我”、“是”、“人”,就可以搜索出来包括这三个关键字的全部记录啊,只是在查询输入窗体是可以用 逗号隔开表示,对这个,todaynew 版主有个很好的实例,应用上我稍稍改了下。

Private Sub 搜索1_Change()
    Me.Recalc
    Me.搜索1.SelStart = Len(Nz(Me.搜索1.Value, 0))
    If IsNull(Me.搜索1.Value) = False Then
        Me.fsbKhGL.Form.Filter = F模糊条件("tblKhGL", 搜索1)
        Me.fsbKhGL.Form.FilterOn = True
        Me.fsbKhGL.Requery
    Else
        Me.fsbKhGL.Form.Filter = ""
        Me.fsbKhGL.Form.FilterOn = False
    End If
        
End Sub
Private Sub 搜索1_DblClick(Cancel As Integer)
     搜索1 = Null
       Me.fsbKhGL.Form.Filter = ""
      Me.fsbKhGL.Form.FilterOn = False
End Sub

Public Function F模糊条件(A源表, B字符串, Optional C1查询字段1_字段2 = "", Optional D操作 = "and")
    Dim stWher, stTqCtl
    Dim AA, BB, CC, DD, EE, FF, GG, HH, II, JJ
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim UUx, Um, Ui
    Dim VVx, Vm, Vi
    Dim str
   
    str = B字符串
    If IsNull(B字符串) Or B字符串 = "" Then
        '无字符串,为全部显示
    '    F模糊条件 = "1=1"
        F模糊条件 = True
    Else
        If C1查询字段1_字段2 = "" Or IsNull(C1查询字段1_字段2) Then
            '默认为表的全部字段
            Set db = CurrentDb()
            Set rs = db.OpenRecordset("SELECT * FROM [" & A源表 & "]")
            For BB = 0 To rs.Fields.Count - 1
                CC = rs.Fields(BB).Name
                DD = DD & " & '_' & [" & A源表 & "].[" & CC & "]"
            Next
            rs.Close
            Set rs = Nothing
        Else
            VVx = Split(C1查询字段1_字段2, "_")
            Vm = UBound(VVx)
            For Vi = 0 To Vm
                CC = VVx(Vi)
                DD = DD & " & '_' & [" & A源表 & "].[" & CC & "]"
            Next
        End If
        DD = Mid(DD, 10)
        
        str = Replace(str, " ", "_")           
        str = Replace(str, ",", "_")
       str = Replace(str, ",", "_")
        
        str = Replace(str, ".", "_")
        
        str = Replace(str, "。", "_")
        
        str = Replace(str, "-", "_")   
        
        UUx = Split(str, "_")
        Um = UBound(UUx)
        For Ui = 0 To Um
            FF = UUx(Ui)
            If FF = "" Then
                Exit For
            Else
                If D操作 = "AND" Then
                    GG = GG & " AND " & DD & " LIKE '*" & FF & "*'"
                Else
                    GG = GG & " OR " & DD & " LIKE '*" & FF & "*'"
                End If
            End If
        Next
        F模糊条件 = Mid(GG, 6)
    End If
End Function
6#
 楼主| 发表于 2013-4-24 18:24:58 | 只看该作者
本帖最后由 sxgaobo 于 2013-4-24 18:26 编辑

谢谢各位的关注!
我没说明白,是这样的:
比如筛选条件是:市紫金东路5号24幢
希望下面的记录都被筛选出来
市紫金东路五号二十四幢3单元5层西房
市紫金东街5号24幢5单元6层西房
市紫金东路5号24号楼3单元3层东房
7#
发表于 2013-4-24 18:30:13 | 只看该作者
sxgaobo 发表于 2013-4-24 18:24
谢谢各位的关注!
我没说明白,是这样的:
比如筛选条件是:市紫金东路5号24幢

试试通配符
8#
发表于 2013-4-25 01:19:48 | 只看该作者
印象中,前段时间大肚鸭斑竹不是写过组合框查询例子吗?参考下?
9#
 楼主| 发表于 2013-4-26 18:33:07 | 只看该作者
不能用组合框啊,其实是对应2个表里的数据
如果表1中的坐落是:市紫金东路5号24幢
表2中下列的坐落则视为相同一幢楼
市紫金东路五号二十四幢3单元5层西房
市紫金东街5号24幢5单元6层西房
市紫金东路5号24号楼3单元3层东房
10#
发表于 2013-4-26 18:52:08 | 只看该作者
本帖最后由 zww3008 于 2013-4-26 18:54 编辑

提供一种思路,可以建一个格式统一函数,将如“24号楼”、“二十四幢”、“24栋”、“24座”...统一为一种格式,再来执行查询。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 12:29 , Processed in 0.097289 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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