【Access小品】词不达意--对于混乱表达的分析示例-煮江品茶
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-教程


【Access小品】词不达意--对于混乱表达的分析示例

发表时间:2015/5/13 9:26:48 评论(1) 浏览(6787)  评论 | 加入收藏 | 复制
   
摘 要:【Access小品】词不达意 -- 对于混乱表达的分析示例
正 文:
  今日看到一个名曰蛋蛋的版友发贴问的一个问题《任意数值怎么表示》:“请问,在数据库中任意文本的表述可用“*”,“?”,“%”来表示,那若是数值型的要表示任意性用什么表达呀?具体表述如下:做的内容是这样有两个选项,一个未完成(设为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,也就是一个恒定的是。筛选的结果集就是全部数据。此法不仅限于一个字段的筛选,也不仅限于数字型字段的筛选。当多个控件组合筛选时,我们一样可以借用这个方法来得到全部的或者部分的结果集。

Access软件网交流QQ群(群号:198465573)
 
 相关文章
SQL 语句中的通配符  【jimcloudy整理  2007/11/21】
Access中使用like通配符  【风行  2011/3/15】
【access小品】巧用逻辑表达式和逻辑值  【煮江品茶  2011/9/5】
access中like通配符的含义  【宏鹏  2012/3/5】
【Access基础扫盲】字符 字符串 表达式 ‘定义’  【小赵  2013/8/14】
通配符的注意事项  【杜威  2013/12/2】
常见问答
技术分类
相关资源
文章搜索
关于作者

煮江品茶

文章分类

文章存档

友情链接