设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1554|回复: 5
打印 上一主题 下一主题

[窗体] 对窗体的筛选查询哪种好

[复制链接]
跳转到指定楼层
1#
发表于 2011-7-12 19:28:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在对子窗体的筛选查询中,我知道的有两种常用方式,一是通过设置子窗体的filter筛选条件来进行筛选;另一种是通过改变子窗体记录源的筛选条件来进行筛选。我想问,这两种查询筛选,哪种方式更安全,更好些呢?

另外见附件和图片,查询1和查询2分别代表上述两种查询方式,为什么同样的筛选条件,在查询1中不起作用,在查询2中却能起作用呢?
如果查询1要得出查询2的结果,代码应该怎么修改呢?

在此先谢了。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2011-7-12 20:24:44 | 只看该作者
简 发表于 2011-7-12 19:28
在对子窗体的筛选查询中,我知道的有两种常用方式,一是通过设置子窗体的filter筛选条件来进行筛选;另一种 ...

Private Sub cmdfind1_Click()
Dim strwh As String
strwh = "True"
If IsNull(Me.cbofindgr) = False Then
    strwh = strwh & " and grid like '*" & Me.cbofindgr & "*'"
End If
Me.sub0.Form.Filter = strwh
Me.sub0.Form.FilterOn = True
End Sub

Private Sub cmdfind2_Click()
Dim strwh As String
strwh = "True"
If IsNull(Me.cbofindgr) = False Then
    strwh = strwh & " and grid like '*" & Me.cbofindgr & "*'"
End If
Me.sub0.Form.RecordSource = "SELECT * FROM tblGSdengji WHERE " & strwh & " ORDER BY grid;"
End Sub
3#
发表于 2011-7-12 20:26:41 | 只看该作者
本帖最后由 todaynew 于 2011-7-12 21:00 编辑

1、两种方法的侧重点不同,筛选的侧重点在准则,相当于仅对SQL语句的WHERE子句进行设置;设置窗体数据源的侧重点在于全部的SQL语句。因此,设置数据源涉及的范围更为广泛一些。
2、一般情况下用筛选的方法就可以对窗体数据进行过滤了,所以这种方法是常规的运用手段。但是在一些比较特殊的情况下,用筛选不能解决问题。比如我们要获取窗体前20条记录,这种情况要用到TOP,无法用筛选的方法处理;再比如我们需要排除存在与另一表中的记录,这种情况要用到子查询,也无法用筛选的方法处理。诸如此类,就只能用设置窗体数据源的方法进行了。
3、这两种方法是可以交替使用的,一般情况下先用设置窗体数据源的方法,确定窗体数据的大范围,然后用筛选的方法来进行不同的查询。只是由于窗体数据源通常是预先设置好的,通常不去改变它,所以人们不大注意到这个过程而已。你可以把这两个过程理解为两个筛孔不同的筛子,设置窗体数据源用的是筛孔较大的筛子,而筛选的方法就是筛孔较小的筛子。


4#
 楼主| 发表于 2011-7-12 20:53:44 | 只看该作者
todaynew 发表于 2011-7-12 20:24
Private Sub cmdfind1_Click()
Dim strwh As String
strwh = "True"

我晕死~~~
两种查询的筛选条件都是一样!不一样的地方在于查询1没用ORDER排序而已。为什么这个ORDER BY grid排序会使查询1按钮没动静呢?
5#
发表于 2011-7-12 20:55:38 | 只看该作者
简 发表于 2011-7-12 20:53
我晕死~~~
两种查询的筛选条件都是一样!不一样的地方在于查询1没用ORDER排序而已。为什么这个ORDER BY  ...

筛选的方法只与WHERE子句有关,ORDER BY 是另外的子句,所以无效。
6#
 楼主| 发表于 2011-7-13 11:00:10 | 只看该作者
todaynew 发表于 2011-7-12 20:55
筛选的方法只与WHERE子句有关,ORDER BY 是另外的子句,所以无效。

郁闷,我觉得,就算ORDER BY是另外的子句,但都不应该影响筛选的结果才是,但实际上,就因为这个子句,让筛选失了效~~~~

两种查询的方法我懂了,正如你说的,设置窗体数据源用的是筛孔较大的筛子,而筛选的方法就是筛孔较小的筛子。在窗体数据源确定的情况下,显然用筛选的方法更方便些,对吧。

在此先谢谢老汉了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-29 20:27 , Processed in 0.585957 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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