Access“是/否”类型字段与SQL Server bit类型字段你需要知道的
时 间:2019-01-06 21:48:25
作 者:红尘如烟 ID:10768 城市:成都
摘 要:二态值字段的使用注意事项,技巧,问题解决办法
正 文:
起初先使用 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值造成的,和写入冲突没有五毛钱关系。
然后很多小朋友不知道,就一直在写入冲突这个方向去想,最后就被搞崩溃了:现在就我自己在使用,哪里来的鬼的其他人啊啊啊啊啊???!!!
- 在 Access 中,将是否类型字段默认值设为 0,必需属性设为“是”。
- 在 SQL Server 中,将 bit 类型字段默认值设为 0,将“允许Null值”取消打勾。
如此这般,我们就可以安享晚年,不用再操碎心了。
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access判断多条明细的配方或订...(11.30)
- 如何让后台数据库在局域网共享时,且...(11.29)
- 【Access月初月末日期设置方法...(11.29)
- 【Access IIF函数嵌套示例...(11.26)
- Access快速开发平台--使用组...(11.25)
- Access快速开发平台--对上传...(11.22)
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)