Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-教程

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

时 间:2015-05-13 09:26:48
作 者:煮江品茶   ID:10802  城市:武汉
摘 要:【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群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助