Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

根据日期起止进行模糊查询

王萌萌  发表于:2014-04-16 13:41:48  
复制

如题,我想通过起止日期进行模糊查询,查询内容是要全字段模糊查询,起止日期依据外出日期,如何实现谢谢。

 

Top
煮江品茶 发表于:2014-04-16 14:02:38

dim wh as string

wh="True"

if isnull(me.开始日期.value)=false then

    wh=wh & " and 外出日期>=#" & me.开始日期.value & "#" 

end if

if isnull(me.结束日期.value)=false then

    wh=wh & " and 外出日期<=#" & me.结束日期.value & "#" 

end if

me.阁下的子窗体控件名称.form.filter=wh

me.阁下的子窗体控件名称.form.filteron=true



王岚 发表于:2014-04-16 14:26:48
请问wh是指什么。我有一个查询内容文本框,在你的代码里是哪一个。

zhaoyoulong 发表于:2014-04-16 14:32:10

wh是一个变量

根据煮江品茶老师的类似写法,再加一条件

dim wh as string

wh="True"

if isnull(me.开始日期.value)=false then

    wh=wh & " and 外出日期>=#" & me.开始日期.value & "#" 

end if


if isnull(me.结束日期.value)=false then

    wh=wh & " and 外出日期<=#" & me.结束日期.value & "#" 

end if



if isnull(me.查询内容.value)=false then

    wh=wh & " and 字段值 like *'" & me.查询内容.value & "'*"

end if


me.阁下的子窗体控件名称.form.filter=wh


me.阁下的子窗体控件名称.form.filteron=true





王岚 发表于:2014-04-16 15:08:40

你的代码中的字段值是指某个字段吗,但是我要所有字段的模糊查询,



zhaoyoulong 发表于:2014-04-16 15:22:56

dim AllFildStr as string

AllFildStr=Cstr(NZ([字段1])) & Cstr(NZ([字段2]))......Cstr(NZ([字段N])) 

if isnull(me.查询内容.value)=false then

    wh=wh & " and " & AllFildStr  & " like *'" & me.查询内容.value & "'*"

end if




cspa 发表于:2014-04-16 15:29:53

在标准模块中写入下列函数,再在“查询内容”变更事件中调用。如:

Sub subCX(objWinName As Object, Optional objTxtName As Object, _
          Optional strStartDate As String, Optional strEndDate As String)
Dim strWhere As String
Dim ctl As Control
Dim ctlname As String

objTxtName.SetFocus
strWhere = Trim$(objTxtName.Text)
If strWhere = "" Then
    strWhere = True
  Else
    For Each ctl In objWinName.Form.Controls
        If TypeOf ctl Is TextBox Then
             ctlname = ctlname & "[" & ctl.Name & "] & "
        End If
    Next
    ctlname = Left(ctlname, Len(ctlname) - 3)
    strWhere = "" & ctlname & "  like  '*" & strWhere & "*'"
End If
 If Nz(strStartDate, "") <> "" Then
    strWhere = "(" & strWhere & ") and  外出日期 >=#" & strStartDate & "#"
End If
If Nz(strEndDate, "") <> "" Then
    strWhere = "(" & strWhere & ") and  外出日期 <=#" & strEndDate & "#"
End If
objWinName.Form.Filter = strWhere
objWinName.Form.FilterOn = True
End Sub

 

调用时的事件函数:

Private Sub 查询内容_Change()
            subCX Me.Child1, Me.查询内容, Nz(Me.开始日期, ""), Nz(Me.结束日期, "")
End Sub

 



王岚 发表于:2014-04-16 15:43:29

Private Sub cmd查询_Click()
Dim wh As String
Dim AllFildStr As String
wh = "True"
If IsNull(Me.开始日期.Value) = False Then
    wh = wh & " and 外出日期>=#" & Me.开始日期.Value & "#"
End If
If IsNull(Me.结束日期.Value) = False Then
    wh = wh & " and 外出日期<=#" & Me.结束日期.Value & "#"
End If

AllFildStr = CStr(Nz([外出人])) & CStr(Nz([驾驶员])) & CStr(Nz([车牌号]))
If IsNull(Me.查询内容.Value) = False Then
    wh = wh & " and " & AllFildStr & " like *'" & Me.查询内容.Value & "'*"

End If

Me.外出申请明细.Form.Filter = wh

Me.外出申请明细.Form.FilterOn = True

End Sub

 

这是完整的代码,看看是否对,我这里报错,说找不到引用的字段“/”



zhaoyoulong 发表于:2014-04-16 15:50:38
发个附件

zhaoyoulong 发表于:2014-04-16 16:09:37
AllFildStr = CStr(Nz([外出人])) & CStr(Nz([驾驶员])) & CStr(Nz([车牌号]))

王岚 发表于:2014-04-16 16:42:13
点击下载此附件     附件已上传,请看一下哪里有问题。谢谢

zhaoyoulong 发表于:2014-04-16 16:57:16

点击下载此附件

 like *'" & Me.查询内容.Value & "'*"

写反了一个符号  就写成

 like '*" & Me.查询内容.Value & "*'"



王岚 发表于:2014-04-17 15:58:40

感谢zhaoyoulong老师的帮助,

现在还有一个问题,如图:

1、付款情况中选择全部,没有效果,不能显示全部数据。

2、我想要付款情况在对应起止日期中进行筛选。不知道是否可行。谢谢

点击下载此附件

 



zhaoyoulong 发表于:2014-04-17 17:22:07

去掉红色代码
   ' If FilterStr <> "" Then


        Me.采购合同列表.Form.Filter = FilterStr


        Me.采购合同列表.Form.FilterOn = True


    'End If

点击下载此附件



王岚 发表于:2014-04-18 08:50:39

谢谢,第一个问题解决了。第二个问题还没解决,我的目的是:比如我的开始日期从2013年1月1日-结束日期2013年1月31日之间筛选付款情况,就是和其他现有的筛选条件类似的效果。



zhaoyoulong 发表于:2014-04-18 09:08:29
没明白

王岚 发表于:2014-04-18 09:18:10
就是比如说我要在2013年1月1日-1月31日之间筛选出已付款或者未付款情况,但是我现在如果选择已付款或者未付款的话,是在所有时间段中筛选的。我要根据所选的日期来进行筛选。谢谢

zhaoyoulong 发表于:2014-04-18 09:31:31

我都搞糊涂了,你到底要哪个查询呢?

是派车的还是关于合同的?




王岚 发表于:2014-04-18 09:36:30
合同。12楼的那个。

zhaoyoulong 发表于:2014-04-18 10:04:55

点击下载此附件

和以上方法雷同



王岚 发表于:2014-04-18 11:10:35
非常感谢你的帮助。

总记录:20篇  页次:1/1 9 1 :