Access交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 活动
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • 如何得到某年每个月的第一天..
  • select case后面..
  • 不用API或ADO 获取磁..
  • 根据不同的SQL语句获取记..
  • Access在规定时间内禁..
  • 在ACCESS2000中如..

最新文章

  • Access或VB VBA..
  • 关于VBA的0、""(空字..
  • Access导出函数Out..
  • Access日期与日期区间..
  • RecordSource ..
  • Access子窗体事件控制..

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > 模块/函数/VBA/API/系统 > VBA基础
VBA基础

Access 中IIF Switch Choose 3个函数的区别和使用方法

作者:月亮的博客和大漠孤烟


先看定义

IIf,Switch和Choose

 

【1】IIf函数: 调用格式:IIf(条件式,表达式1,表达式2) 该函数是根据“条件式”的值来决定函数返回值。“条件值”为真,函数返回“表达式1”的值,否则返回“表达式2”的值。

【2】Switch函数: 调用格式:Switch(条件式1,表达式1[,条件式2,表达式2……[,条件式n,表达式n]]) 该函数是分别根据“条件式1”、“条件式2”直至“条件式n”的值来决定函数返回值。条件式是由左至右进行计算判断的,而表达式则会在第一个相关的条件式为True时作为函数的返回值返回。如果其中有部分不成对,则会产生一个运行错误。 

【3】Choose函数: 调用格式:Choose(索引式,选项11,选项2,...[,选项n]]) 该函数式根据“索引式”的值来返回选项列表中的某个值。“索引式”值为1,函数返回“选项1”值;“索引式”值为2,函数返回“选项2”值:依次类推。这里,只有在“索引式”的值界于1和可选项的项目数之间,函数才返回其后的选项值;当“索引式”的值小于1或大于列出的选择项数目时,函数返回无效值(Null)。


再说明一下Swith与Choose 不同的用法


Option Explicit


Private Sub Command1_Click()
    'VB的Switch语句
    Dim strKey            As String
    Dim strGetValue       As String
    
    strKey = "2"
    strGetValue = Switch(strKey = "1", "a", strKey = "2", "b")
    MsgBox strGetValue          '得到 b
End Sub


Private Sub Command2_Click()
    'VB的Choose语句
    Dim strKey            As String
    Dim strGetValue       As String
    
    
    strKey = "3"
    strGetValue = Choose(strKey, "a", "b", "c")
    MsgBox strGetValue         '得到c
End Sub


SELECT UserPassportID as PassportID, UserID, GrantorID, Case ObjectTypeID When 1 then ObjectID 

End as TerminalID, Type, Flag, GrantDate, Validate, Invalidate From UserPassport


在SQL里能执行,但在Access里总提示语法错误(操作符丢失).在查询表达式'Case ObjectTypeID 

When 1 then ObjectID End'中?


SQL:

select bb,cc,case aa when '一星级' then '*' 

when '二星级' then '** ' 

when '三星级' then '*** ' 

when '四星级' then '**** ' 

when '五星级' then '***** ' 

end 

from aaa


Access: 

select   bb,cc,iif(aa='一星级','*',iif(aa='二星级','**',iif(aa='三星级','***',iif(aa='四星级','****',iif(aa='五星级','*****'))))) from aaa;



前期在一网站应用中使用了IIF嵌套语法充分享受了它的魅力:

select Top 1 IIf(InStr(DownUrls,'http://')>0,Mid(DownUrls,InStr(DownUrls,'h')),IIf(InStr(DownUrls,'mms://')>0,Mid(DownUrls,InStr(DownUrls,'m')),Mid(DownUrls,InStr(DownUrls,'/')))) as VideoUrl from KS_DownLoad Order by Adddate


Access中程序流程函数有三个,Iif ,Switch 和 Choose。IIF的用法已经很常见了,网上搜一下大把打把的。这儿主要讲后面的两个:Switch和Choose。

Switch关键字

Access中没有Case When的用法,所以对于某些筛选比较就显得很吃力。不过还好,Access中有一个Switch可以解决这个问题。Switch 的语法是:SWITCH( case_1, result_1[, case_2, result_2...])。Switch的计算顺序为从左到右,将返回第一个为true的case对应的result。ACCESS对Switch有预编译(基本能够写进ACCESS的Sql都有预编译,ACCESS不支持Execute(SqlString)的用法),所以Switch中的条件和结果不能有逻辑错误和语法错误,否则不能执行。

实例:表tUser中有字段sex Text(1),用于存储用户性别,其中,如sex='m',用户为男性;sex='f',用户为女性;其他情况为保密。为了便于sql语句的说明,我们假设还有其他两个字段,userid和username。

在SqlServer中,如果要在搜索结果中直接显示性别的名称SexName(不是m/f之类的代码),使用Case When很方便。

SELECT UserID, 
             
 UserName, 
              SexName = WHEN LCASE(Sex) 
               
 CASE 'm' THEN N'男'
                CASE 'f' THEN N'女'
                ELSE N'保密' END

FROM tUser

ACCESS不支持WHEN CASE的用法。虽然不那么灵巧,但是用Switch可以解决这个问题。

SELECT UserID,
              UserName,
              SWITCH(
               Sex = 'f',  '男',
               Sex = 'm', '女',
               True, '保密'
               ) AS SexName
FROM tUser

上述中最后一个Case为true,该用法类似于When Case语法中的Else。

Choose关键字

对于Choose关键字的用法,暂时没有想到在它与SQLServer中的那个用法对应。

Choose函数的语法如下:Choose(Index,Choice_1[,Choice_2...])。其中,Index为从1开始的整数,Choice对应的是与Index相对应的选择项的值。

一时没有想到太好的例子,就用上面的那个关于用户性别的例子吧。假如上面的sex使用1替代m,代表男性,2替代f,代表女性。

SELECT UserID,
              UserName,
              IIF(CHOOSE(CINT(Sex),'男性','女性') IS NULL,
                 '保密',
                 CHOOSE(CINT(Sex),'男性','女性')
                  ) AS SexName

FROM tUser

如果你说sex还是使用的m/f,那么怎么用

可以画蛇添足,使用Choose + Switch的嵌套啊。具体的嵌套代码我就不写了,没有什么价值,主要是在CInt(Sex)那儿嵌套,通过Switch对不同的Sex取不同的Index值。


实话实说,我还没有发现Choose有什么更好的意义。因为Index对应的Choice都是索引好的,就是说需要事先定义的。相对来说,这样就很不灵活 了。索引项都是一个一个写的(本文不讨论在数据库外生成Sql的情况),这很麻烦。功能上Switch可以满足它的所有功能,而且更灵活,逻辑更清晰。



SELECT code,SWITCH(

             mid(code,1,len(code)-2) = '',   '0',

             True,mid(code,1,len(code)-2)

             ) AS pcode

FROM   wz_cl order by code


发布人:zstmtony  
分享到:
点击次数:  更新时间:2017-05-24 23:01:24  【打印此页】  【关闭】
上一条:快速学习Treeview树状控件的详细教程  下一条:自定义时差函数(加入跨天计算功能)



相关文章

  • • Access或VB VBA判断数组的值是否为空的几种方法
  • • 关于VBA的0、""(空字符串)、Null、Empty、与 Nothing 的区别
  • • Access导出函数OutPutto解释
  • • Access日期与日期区间的筛选
  • • RecordSource SourceObject ControlSource属性的区别
  • • Access子窗体事件控制父窗体
  • • 事件​change和AfterUpdate的区别
  • • 代码修改完善方法示例(初学者必读)

热门文章

  • [2009-05-21] 在系统退出的时侯把操作时所用的临时表删除access数据库
  • [2003-12-29] 在ACCESS2000中如何用VBA代码打开一个带有密码的数据库access数据库
  • [2009-04-14] 关于 Partition 函数在分组查询中的应用access数据库
  • [2013-07-09] [技巧分享]Access自动生成按日期递增的文件名access数据库
  • [2005-02-05] 如何在 mdb 中获取 GUID 字符串access数据库
  • [2005-08-16] 过滤指定字符access数据库

热门产品

公司动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图

Access交流网 版权所有 1999-2018 粤ICP备10043721号

QQ:18449932

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2023  www.metinfo.cn