Access交流中心

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

窗体内查询条件的设置问题

白桦林  发表于:2010-11-02 11:07:36  
复制

点击下载此附件

见附表

我想查询截止今天年龄大于18(在未绑定文本框的年龄小值里输入)小于50(在未绑定文本框的年龄小值里输入)的人

运行查询后出问题了

那位老师帮我看看问题出在哪里了!!

 

以上只是例子,我实际要用的查询条件比这个更多,所以只能用这种条件连接的方式设置查询条件

 

我没有积分

只能在这里谢谢您了!!

 

Top
白桦林 发表于:2010-11-02 12:56:19

请在打开主窗体设计后查看我写的代码

看看是哪里的问题



煮江品茶 发表于:2010-11-02 16:44:07

主要问题出在DateAdd第一个参数的用法上,这个参数是一个字符型的,需要引号。此外给你将代码简化了一下。

 

Private Sub 查找_Click()
Dim strWhere As String
strWhere = "True"
If Not IsNull(Me.文化程度) Then
    strWhere = strWhere & " AND ([文化程度] like '*" & Me.文化程度 & "*')"
End If
If Not IsNull(Me.年龄小值) Then
    strWhere = strWhere & " AND ([出生日期] <= #" & DateAdd("yyyy", -(Me.年龄小值), Now()) & "#)"
End If
If Not IsNull(Me.年龄大值) Then
    strWhere = strWhere & " AND ([出生日期] >= #" & DateAdd("yyyy", -(Me.年龄大值), Now()) & "#)"
End If
Me.查询子窗体.Form.Filter = strWhere
Me.查询子窗体.Form.FilterOn = True
End Sub



白桦林 发表于:2010-11-02 21:15:22

楼上的老师好:

你给的代码我加进去了,但调试失败

输入年龄区域后点击查询没反映。

你能帮我调试一下吗?

请把调试好的文件发给我,好吗?



wyh99999 发表于:2010-11-02 22:00:13

原语句:

  If Not IsNull(Me.年龄小值) Then
       strWhere = strWhere & "(Year(Date())-Year([出生日期]) <= #" & DateAdd(yyyy, -(Me.年龄小值), Now()) & "#) AND "
  End If
  If Not IsNull(Me.年龄大值) Then
       strWhere = strWhere & "(Year(Date())-Year([出生日期])>= #" & DateAdd(yyyy, -(Me.年龄大值), Now()) & "#) AND "
  End If

将年龄段语句改为:

 

If Not IsNull(Me.年龄小值) Then
    strWhere = strWhere & "(Year(Date())-Year([出生日期]) >= " & Me.年龄小值 & " ) AND "
End If
If Not IsNull(Me.年龄大值) Then
    strWhere = strWhere & "(Year(Date())-Year([出生日期])<= " & Me.年龄大值 & " ) AND "
End If

我测试后可行,供您参考.



wyh99999 发表于:2010-11-02 22:10:01
白桦林 发表于:2010-11-03 00:02:16

谢谢五楼的朋友

试运行了你给写的代码

可以运行

 

这个方法是简单

但得到的结果和想要的结果不一致

比如我要找截止今天大于20岁的

运行的结果却把1990年12月31出生的(实际不到20岁)人也显示出来。

 

请再帮我想想办法!!

谢谢



白桦林 发表于:2010-11-03 02:26:23

我想用下面的方法:

If Not IsNull(Me.年龄小值) Then
      strWhere = strWhere & "DateDiff("d",#[出生日期]#,#Date()#)/365 >= " & Me.年龄小值 & " ) AND "
    End If
    If Not IsNull(Me.年龄大值) Then
      strWhere = strWhere & "Datediff("d",#[出生日期]#,#Date()#)/365  <= " & Me.年龄大值 & " ) AND "
    End If
但在写完该语句后光标停在红色的“d”的位置,提示缺少结束语句

不知道问题出在了哪里



wyh99999 发表于:2010-11-06 21:20:58

   针对楼主的问题(但是多个文本框对应一个字段的查询如何实现呢?),我有一个想法:

    老师和煮江品茶 老师都是根据楼主三个文本框去解决问题。我想,能不能用一个文本中的多个子字符串的内容在一个字段中去查询呢?(象百度搜索中那样字符加空格)

一、文本框输入:(内容加空格....)

二、按键(回车键)事件中的语句:1、判断文本框的值有几个子字符串;2、根据子字符串的个数,利用循环语句与煮江品茶老师的 str=str & " And 查询字段名 Like '*" & me.(循环中的值I).value & "*'"

望老师指教:能实现我这个想法吗?更希望有实现的实例。



wyh99999 发表于:2010-11-06 21:24:17

对不起,8楼发错地方了。

应该是:http://www.accessoft.com/bbs/showtopic.asp?ID=10445



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