设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[查询] 请帮忙看看我写的查询如何才能在窗体中正常刷新?

[复制链接]
跳转到指定楼层
1#
发表于 2007-9-20 12:03:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
子窗体NewSmall_3Subform引用查询如下(红字部分是问题所在,后面详述):

SELECT PartNumber_Master.*FROM PartNumber_MasterWHERE (((PartNumber_Master.New_No)=[Forms]![New_Small_3]![text]) AND ((PartNumber_Master.supplier) Like IIf(IsNull([Forms]![New_Small_3]![SupplierSelect]),'*',[Forms]![New_Small_3]![SupplierSelect]))) AND ((PartNumber_Master.hiding)="3");

在窗体中Me![NewSmall_3Subform].Requery无更新查询结果,把查询改成如下,则没有问题:

SELECT PartNumber_Master.*FROM PartNumber_MasterWHERE (((PartNumber_Master.New_No)=[Forms]![New_Small_3]![text]) AND ((PartNumber_Master.supplier) =[Forms]![New_Small_3]![SupplierSelect]) AND ((PartNumber_Master.hiding)="3");

但这样的查询无法实现当SupplierSelect无内容时就显示全部数据的要求,请教第一个查询的问题是在哪里?  

谢谢!

[ 本帖最后由 itez 于 2007-9-20 12:06 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2007-9-20 13:51:29 | 只看该作者
但这样的查询无法实现当SupplierSelect无内容时就显示全部数据的要求,请教第一个查询的问题是在哪里?  


我个人认为,在这种情况下应该取消这个条件.在生成查询句前先判断一下是否为空.

SELECT PartNumber_Master.*FROM PartNumber_MasterWHERE (((PartNumber_Master.New_No)=[Forms]![New_Small_3]![text])  AND ((PartNumber_Master.hiding)="3");
3#
 楼主| 发表于 2007-9-20 14:16:14 | 只看该作者
原帖由 kangking 于 2007-9-20 13:51 发表
但这样的查询无法实现当SupplierSelect无内容时就显示全部数据的要求,请教第一个查询的问题是在哪里?  


我个人认为,在这种情况下应该取消这个条件.在生成查询句前先判断一下是否为空.

SELECT PartNumber_M ...


在生成查询句前先判断一下是否为空,然后呢?

我的查询是允许为空也允许不为空的呀,少了一个条件的话,怎么补呢?
4#
发表于 2007-9-20 14:40:42 | 只看该作者
我通常是这样做的:
设置一个字串变量,用以保存条件,比如为strWhere,然后
if isnull(字段) then
strwhere=条件1                     
else
strwhere=条件2
end if
sql="select f1,f2,... from t where " & strwhere & ";"
条件的形式为:"字段=" & xxx或"字段='" & xxx & "'"或" 字段=#" & xxx & "#",或:"字段=" & xxx " and 字段='" & xxx & "'",......等等,其中xxx可以是变量或是窗体上字段的名称.
5#
 楼主| 发表于 2007-9-20 15:14:42 | 只看该作者
原帖由 kangking 于 2007-9-20 14:40 发表
我通常是这样做的:
设置一个字串变量,用以保存条件,比如为strWhere,然后
if isnull(字段) then
strwhere=条件1                     
else
strwhere=条件2
end if
sql="select f1,f2,... from t where " & s ...

明白你的意思了,可为什么我头一个的方法却不行呢?
6#
发表于 2007-9-20 17:17:50 | 只看该作者
明白你的意思了,可为什么我头一个的方法却不行呢?

因为这个星号"*"表示的意思是任何字符,只要字段不是空或空串,就有字符,满足条件;当字段为空或空串时,没有任何字符,因此不符合条件.
7#
 楼主| 发表于 2007-9-20 17:38:30 | 只看该作者
原帖由 kangking 于 2007-9-20 17:17 发表
明白你的意思了,可为什么我头一个的方法却不行呢?

因为这个星号"*"表示的意思是任何字符,只要字段不是空或空串,就有字符,满足条件;当字段为空或空串时,没有任何字符,因此不符合条件.

你说的没错,但我所要的正是显示有内容的数据呀?

而且新建一个窗体,使用相同的子窗体,在原窗体中选择条件,后再打开新窗体,就能在子窗体中显示正确的查询结果!

也就是说,使用Requery刷新子窗体是不能使查询更新的(至少显示结果是这样),但如果使用弹出窗体的话就没有问题(也就是后开),这是我所不能理解的,或者有比Requery更强的刷新语句?
8#
发表于 2007-9-21 09:50:50 | 只看该作者
Me.Recalc  或  Me.Refresh  试试.
另外你如果要查出全部的数据,就应该没有条件都对.
9#
 楼主| 发表于 2007-9-21 11:31:37 | 只看该作者
原帖由 kangking 于 2007-9-21 09:50 发表
Me.Recalc  或  Me.Refresh  试试.
另外你如果要查出全部的数据,就应该没有条件都对.

Me.Recalc和Me.Refresh甚至Me.Repaint都试过了,还是不行。

我觉得现在不是查询条件如何写的问题,而是Like IIf语句刷新的问题,因为后弹窗体既然能显示出某些查询数据,那么不管这些数据本身体现的是什么含义,都说明了该查询语句本身是可执行的,只是不知道为什么无法在本身子窗体中刷新执行而已。
10#
发表于 2007-9-21 12:05:47 | 只看该作者
WHERE IIf([Forms]![New_Small_3]![SupplierSelect] & ""="",[PartNumber_Master.supplier]Like "*",[PartNumber_Master.supplier]=[Forms]![New_Small_3]![SupplierSelect])

大概是这样,因为没实例还测试。
关键点:一个是like“*” 要在一起,而不能分开。另一个是通过窗体文本框连上一个空字串保证isnull和""都能查到所有数据。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-16 02:59 , Processed in 0.099784 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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