今日看到一个名曰蛋蛋的版友发贴问的一个问题:“请问,在数据库中任意文本的表述可用“*”,“?”,“%”来表示,那若是数值型的要表示任意性用什么表达呀?具体表述如下:做的内容是这样有两个选项,一个未完成(设为0),一个已完成(设为1),若分别选其中一个会根据之前的判断0或1会出来相应的内容,若不选就默认任意数值就会出来全部的。” 这个问题很多版友进行了回答,所有解答均沿着通配符的处理展开。这个问题真的涉及通配符吗?答案是否定的。 暂且不论该问题的正确答案是什么。我们首先来分析一下,将解答引入歧途的原因是什么。该问题的表述的逻辑是从文本的通配符开始,进而询问到数值型的任意匹配,再到一个状态字段的筛选。其实这个表述是词不达意的,甚至是风马牛不相及!完全无须这么长的逻辑链来说明这个问题。只需要问:一个状态字段的筛选,如何在为空值(Null)时,能显示全部数据。也就是说,解决这个问题是否与通配符相关并非必要,提问时也不必考虑。 为什么提问时,无须考虑解决的过程,而只需说明结果呢?其原因有二,其一是提问者过多的表述,可能引起不必要的误解(这一点在这个问题的解答中表现的很典型)。其二是实现一个需要的功能(也就是解决一个问题),可以有许多种方法,解答者可以根据自己的水平、偏好、对问题的理解,给出丰富多彩的答案。这些不同的答案,可以给提问者和其他版友不同侧面的提示和思考。所以,特别要理解,问题和答案之间并非是一对一的关系,一对多的答案是常态,也最有价值。 回到蛋蛋同志的问题上来。这个问题,实际上只需要看最后一部分,也就是关于一个字段的筛选问题而已。所谓筛选,就是按照某种逻辑表达式获取记录的结果集。所以重点是逻辑表达式,而逻辑表达式的结果无非两种,要么是要么非。恒定的是,得到的是全部数据的结果集;恒定的非,得到的是空集;符合一定条件的是,得到的是子结果集。 明白了这个道理,我们要想得到全部数据(这是蛋蛋同志问题的核心),也就是要获得一个恒定的是。那么怎么表达恒定的是呢?很简单,True就是恒定的是。当然你写成-1(注意这是在Access中,其他地方可能是1)也行,还有人写成1=1或者2=2什么的。只要这个表达式的结果是恒定的是就行。同理你要得到一个空集,就只需要False一家伙,也可写成0,或者1=2什么的。 这层纸被捅破了,什么都不神秘,解决的方法也就是十分的简单了。我们假设蛋蛋同志的主窗体上有一个名曰:“状态”的组合框,该组合框数据源类型为值列表,其列表值为:0;未完成;1;已完成,宽度为0cm;2cm。假设子窗体中也有一个对应的“状态”控件。则在组合框的更新后事件中写: dim wh as string wh="True" if isnull(me.状态.value)=false then wh=wh & " and 状态=" & me.状态.value end if me.子窗体.form.filter=wh me.子窗体.form.filteron=true 这样当主窗体中的组合框未选值时,筛选字符串就是True,也就是一个恒定的是。筛选的结果集就是全部数据。此法不仅限于一个字段的筛选,也不仅限于数字型字段的筛选。当多个控件组合筛选时,我们一样可以借用这个方法来得到全部的或者部分的结果集。 |
|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )
GMT+8, 2024-11-25 07:34 , Processed in 0.087575 second(s), 23 queries .
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.