设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

2015-5-13 17:04| 发布者: admin| 查看: 1541| 评论: 5|原作者: todaynew|来自: www.office-cn.net

摘要:   今日看到一个名曰蛋蛋的版友发贴问的一个问题:“请问,在数据库中任意文本的表述可用“*”,“?”,“%”来表示,那若是数值型的要表示任意性用什么表达呀?具体表述如下:做的内容是这样有两个选项,一个未完 ...
  今日看到一个名曰蛋蛋的版友发贴问的一个问题:“请问,在数据库中任意文本的表述可用“*”,“?”,“%”来表示,那若是数值型的要表示任意性用什么表达呀?具体表述如下:做的内容是这样有两个选项,一个未完成(设为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,也就是一个恒定的是。筛选的结果集就是全部数据。此法不仅限于一个字段的筛选,也不仅限于数字型字段的筛选。当多个控件组合筛选时,我们一样可以借用这个方法来得到全部的或者部分的结果集。

发表评论

最新评论

引用 风中漫步 2015-5-13 17:59
呵呵,智商不够,看着太绕.
{:soso_e103:}
引用 zpy2 2015-5-14 06:23
不错 很实用
引用 purplerose 2015-5-28 10:35
呵呵,语文水平差,看得好像绕口令似的,最终也没有明白到底数值型的来表达任意值 用什么来表示呢?{:soso_e120:}
引用 nncchh 2015-7-20 14:38
学习学习,谢谢分享!
引用 owen2016 2016-8-20 11:26
已经下载学习,谢谢

查看全部评论(5)

QQ|站长邮箱|小黑屋|手机版|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.

返回顶部