
Access中有些事“你以为的”不一定是“你以为的”,举几个例子:
1、四舍五入
Excel工作表中有ROUND()四舍五入函数。就是传统意义上的四舍五入。
Access中也有内置ROUND()函数,它使用的是VBA中的ROUND()函数,此VBA函数返回通常称为银行家舍入的内容。
所以Access中的ROUND()函数,是银行家舍入法。
想得到传统的四舍五入,可使用Worksheet.Round函数(需要引用 "Microsoft Excel x.x Object Library"对象库);
也可以自定义一个四舍五入函数:

2、鼠标单击、双击事件
对于接收鼠标事件的对象,事件将按以下顺序发生:
MouseDown → MouseUp → 单击 → DblClick
双击命令按钮时,事件将按以下顺序发生:
MouseDown → MouseUp → 单击 → DblClick → MouseUp → 单击
所以,在Access中一个对象上如果既有单击事件,又有双击事件(比如在ListBox控件中)时,会发生冲突。
解决办法可以使用窗体的定时器,但也不是百分百完美。
3、LEN函数
LEN函数结果返回包含字符串中的字符数或存储变量所需的字节数的长整数。
而这个“存储变量所需的字节数”容易被忽视。以下代码:

会返回4,你可能会想当然地认为4988就是四位数,才会返回4。但如果A=149885,结果也会返回4。事实上返回的是长整型变量的字节数4。
解决方法是将类型转换为字符串:使用cStr()函数:Len(cStr(A)),不要使用Str()函数,因为这两个函数用法不同。
4、DSum()函数
如果没有记录满足函数中的条件参数,或者域不包含任何记录, 则DSum函数返回Null。并非像Excel工作表中的Sum()函数那样返回0。
所以保险起见,最好再使用一个NZ()。
其他域聚合函数也有类似情况,与普通的聚合函数有差别。
5、Select Case语句
在Select Case判断中,如果想判断类似“大于等于50且小于60”的条件,不能直接使用“Case Is >= 50 And Is < 60”这种语法是错误的,也不能使用类似“Case Is >= 50 , Is < 60”的形式,条件判断语句一般都是顺序判断,满足条件后会立即停止判断。
解决办法是使用以下形式的判断:
