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

Access“是/否”类型字段与SQL Server bit类型字段你需要知道的

时 间:2019-01-06 21:48:25
作 者:红尘如烟   ID:10768  城市:成都
摘 要:二态值字段的使用注意事项,技巧,问题解决办法
正 文:

目前各位使用 Access 进行开发的老家伙们对于后台数据库,普遍的模式是:

起初先使用 Access 作为数据库,然后在使用中不断完善。一段时间后,软件变复杂了,数据量也变大了,原来的 Access 数据库就跟不上。这个时候就会升级为 SQL Server 数据库。

当然,这也是我们推荐的方式。逐步推进,慢慢累积,只要你能坚持下来,基本上很难失败。而如果想要一口吃成胖子,一次性就要上一个大而全的系统,基本上都是死路一条。

为什么我一开头说老家伙们?嘿嘿,因为小家伙是不会有这种经验体会的。

以上都是水字数的,下面言归正传,回到本文主题。在 Access 中有一种字段数据类型叫做“是/否”型。当升级到 SQL Server 后,其对应的字段类型是“bit”。

根据我们直观看到的,我们会认为:
  • Access 中“是/否”类型的取值有2种: True 和 False
  • SQL Server 中“bit”类型的取值也有2种: 1 和 0


因为数据库本身的特点,这2种字段还有一种情况,即它的值是 Null。不过严格来说,Null 并不是值,而是一种表示“未知”的状态。这个问题我们稍后再讨论。


严格意义来讲,在 Access 中 True 和 False 只是 2 个关键字。True 的值等于 -1,False 的值等于 0。因此 True 和 Flase 相当于 VBA 中的常量,即用一个有明确意义的名称代替数值,让代码易读。


因此在用来进行判断时,我们可以写成这样:


判断条件时的写法
数据库类型 值为真时的写法
值为假时的写
Access

写法1:Where 字段A=True

写法2:Where 字段A=-1

写法1:Where 字段A=False

写法2:Where 字段A=0

SQL Server
字段A=1
字段A=0

反过来讲,根据不同数据类型之间的转换方式,0 是 False,其它非 0 是 True。

我们更新数据时,可以有这样一些写法:


用于数据更新时的写法
数据库类
值为真时的写法
值为假时的写
Access

写法1:SET 字段A=True

写法2:SET 字段A=-1

写法3:SET 字段A=1

写法4:SET 字段A=2

写法5:SET 字段A=-2

写法6:SET 字段A=3

写法7:SET 字段A=999

写法N:……


写法1:SET 字段A=False

写法2:SET 字段A=0

SQL Server

写法1:SET 字段A=1

写法2:SET 字段A=-1

写法3:SET 字段A=2

写法4:SET 字段A=-2

写法5:SET 字段A=3

写法6:SET 字段A=999

写法N:……


SET 字段A=0


综上,我们可以得出一种可以通用于两种不同数据库的写法


    
Access 和 SQL Server中所有可用的写法 统一的通用写法
判断条件

写法1:Where 字段A=True

写法2:Where 字段A=-1

写法3:Where 字段A=1

Where 字段A<>0

写法1:Where 字段A=False

写法2:Where 字段A=0

Where 字段A=0
更新数据

写法1:SET 字段A=True

写法2:SET 字段A=-1

写法3:SET 字段A=1

写法4:SET 字段A=2

写法5:SET 字段A=-2

写法6:SET 字段A=3

写法7:SET 字段A=999

写法N:……

SET 字段A=1

写法1:SET 字段A=False

写法2:SET 字段A=0

SET 字段A=0


可能有人会问:Access 中True的值是 -1 呀,为什么也可以用 “SET 字段A=1”甚至“SET字段A=999”这样的写法呢


这是因为不同的数据类型是有自动转换功能的,你写入数据时,任何非零值都会被转换为True(也就是-1)!

也就是说 SET 字段A=-2、SET 字段A = 1、SET 字段A=2、SET 字段A=999,都是可以的,但最终保存后,它们都是变成了-1。

只不过为了不引起别人(甚至自己)迷惑,在统一的写法中都用 SET 字段A=1 这种方式。


好了,记住这个最终写法,你就可以以不变应万变,再也不用纠结了。是不是爽歪歪?



不好意思,各位乘客请坐好,老司机要调一下头。


我们再回头来说一下前面提到的 Null 问题,Null 的含义是我不知道这个字段有没有值,对于是否类型或者bit类型,Null 就是说我不知道它是不是True,但我也不知道它是不是False。

这样一来,是能够达成理论完善了,但实际上给我们造成很多麻烦,初学者很容易在这个问题上被困扰。


而且当你将数据保存在 SQL Server,然后在 Access 中使用链接表链接过来时,还会出现一个奇怪的 BUG:

如果表中的bit类型字段有 Null 值时,你添加或修改数据时,都会出现下面这样的写入冲突提示。



实际上这个问题就是因为bit类型字段中有Null值造成的,和写入冲突没有五毛钱关系。

然后很多小朋友不知道,就一直在写入冲突这个方向去想,最后就被搞崩溃了:现在就我自己在使用,哪里来的鬼的其他人啊啊啊啊啊???!!!


为了避免 Null 值造成的这些乱七八糟的问题,除非你明确有特殊需求,否则一般情况下,本公子的建议是:
  • 在 Access 中,将是否类型字段默认值设为 0,必需属性设为“是”。
  • 在 SQL Server 中,将 bit 类型字段默认值设为 0,将“允许Null值”取消打勾。

如此这般,我们就可以安享晚年,不用再操碎心了。




Access软件网官方交流QQ群 (群号:54525238)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

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