Office中国论坛/Access中国论坛

标题: 这样的模糊查询怎么做啊? [打印本页]

作者: sxgaobo    时间: 2013-4-24 08:57
标题: 这样的模糊查询怎么做啊?
将符合给定条件内容百分之7、80的记录筛选出来,如:给定条件为,我是男人,被筛选记录为:1、我是中国人,2、我是女人,3、我是工程师,4、他是德国人。复合模糊查询条件的结果为:1、2
作者: tmtony    时间: 2013-4-24 09:42
1、我是中国人,2、我是女人  =我是男人?
不是很明白意思 啊
作者: zww3008    时间: 2013-4-24 14:00
搜索思路就不对,应该用多个关键字来查询,例如可以使用   我,是,人  来查询符合要求的记录。这种样例很多啊。
作者: Henry D. Sy    时间: 2013-4-24 14:05
zww3008 发表于 2013-4-24 14:00
搜索思路就不对,应该用多个关键字来查询,例如可以使用   我,是,人  来查询符合要求的记录。这种样例很多啊 ...

这样没有搜索出来的就是"我不是人"
作者: zww3008    时间: 2013-4-24 14:17
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

作者: sxgaobo    时间: 2013-4-24 18:24
本帖最后由 sxgaobo 于 2013-4-24 18:26 编辑

谢谢各位的关注!
我没说明白,是这样的:
比如筛选条件是:市紫金东路5号24幢
希望下面的记录都被筛选出来
市紫金东路五号二十四幢3单元5层西房
市紫金东街5号24幢5单元6层西房
市紫金东路5号24号楼3单元3层东房

作者: Henry D. Sy    时间: 2013-4-24 18:30
sxgaobo 发表于 2013-4-24 18:24
谢谢各位的关注!
我没说明白,是这样的:
比如筛选条件是:市紫金东路5号24幢

试试通配符
作者: roych    时间: 2013-4-25 01:19
印象中,前段时间大肚鸭斑竹不是写过组合框查询例子吗?参考下?
作者: sxgaobo    时间: 2013-4-26 18:33
不能用组合框啊,其实是对应2个表里的数据
如果表1中的坐落是:市紫金东路5号24幢
表2中下列的坐落则视为相同一幢楼
市紫金东路五号二十四幢3单元5层西房
市紫金东街5号24幢5单元6层西房
市紫金东路5号24号楼3单元3层东房

作者: zww3008    时间: 2013-4-26 18:52
本帖最后由 zww3008 于 2013-4-26 18:54 编辑

提供一种思路,可以建一个格式统一函数,将如“24号楼”、“二十四幢”、“24栋”、“24座”...统一为一种格式,再来执行查询。
作者: zww3008    时间: 2013-4-26 22:07
[attach]51702[/attach]
字符翻译转换
老汉版主的,借花献佛{:soso_e113:}
作者: sxgaobo    时间: 2013-4-29 01:43
谢谢 zww3008!
很好的东东,可惜还是不适合我用啊~!{:soso_e115:}




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