在access中,我们可以很方便地使用Function声明自定义函数(即过程),并在各处灵活引用它。
1. 先看一下access开发人员参考中关于声明函数的文档声明 Function 过程的名称,参数以及构成其主体的代码。
语法
[Public | Private | Friend] [Static]
Function name [(arglist)] [As type]
[statements]
[name = expression]
[Exit Function]
[statements]
[name = expression]
End Function
Function 语句的语法包含下面部分:
部分描述
Public
可选的。表示所有模块的所有其它过程都可访问这个 Function 过程。如果是在包含
Option Private 的模块中使用,则这个过程在该工程外是不可使用的。
Private
可选的。表示只有包含其声明的模块的其它过程可以访问该 Function 过程。
Friend
可选的。只能在类模块中使用。表示该 Function 过程在整个工程中都是可见的,但对于对象实例的控制者是不可见的。
Static
可选的。表示在调用之间将保留 Function 过程的局部变量值。Static 属性对在该 Function
外声明的变量不会产生影响,即使过程中也使用了这些变量。
name
必需的。Function 的名称;遵循标准的变量命名约定。
arglist
可选的。代表在调用时要传递给 Function 过程的参数变量列表。多个变量应用逗号隔开。
type
可选的。Function 过程的返回值的数据类型,可以是 Byte、 Boolean 、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(除定长)、Object、Variant或任何用户定义类型。
statements
可选的。在 Function 过程中执行的任何语句组。
expression
可选的。Function 的返回值。
其中的 arglist 参数的语法以及语法各个部分如下:
[Optional] [ByVal | ByRef] [ParamArray]
varname[( )] [As type] [=
defaultvalue]
部分描述
Optional
可选的。表示参数不是必需的。如果使用了该选项,则 arglist 中的后续参数都必须是可选的,而且必须都使用 Optional 关键字声明。如果使用了 ParamArray,则任何参数都不能使用 Optional 声明。
ByVal
可选的。表示该参数按值传递。
ByRef
可选的。表示该参数按地址传递。ByRef 是 Visual Basic 的缺省选项。
ParamArray
可选的。只用于 arglist 的最后一个参数,指明最后这个参数是一个 Variant 元素的 Optional 数组。使用 ParamArray 关键字可以提供任意数目的参数。ParamArray
关键字不能与 ByVal,ByRef,或 Optional 一起使用。
varname
必需的。代表参数的变量的名称;遵循标准的变量命名约定。
type
可选的。传递给该过程的参数的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object 或 Variant。如果参数不是 Optional,则也可以是用户定义类型,或对象类型。
defaultvalue
可选的。任何常数或常数表达式。只对于 Optional 参数时是合法的。如果类型为 Object,则显式缺省值只能是 Nothing。
说明
如果没有使用 Public、Private 或 Friend 显式指定,则 Function 过程缺省为公用。如果没有使用 Static,则局部变量的值在调用之后不会保留。Friend 关键字只能在类模块中使用。但 Friend 过程可以被工程的任何模块中的过程访问。Friend 过程不会在其父类的类型库中出现,且 Friend 过程不能被后期绑定。
Function 过程可以是递归的;也就是说,该过程可以调用自己来完成某个特定的任务。不过,递归可能会导致堆栈上溢。通常 Static 关键字和递归的 Function 过程不在一起使用。
所有的可执行代码都必须属于某个过程。不能在另外的 Function、Sub 或 Property 过程中定义 Function 过程。
Exit Function 语句使执行立即从一个 Function 过程中退出。程序接着从调用该 Function 过程的语句之后的语句执行。在 Function 过程的任何位置都可以有 Exit Function 语句。
Function 过程与 Sub 过程的相似之处是: Function 过程是一个可以获取参数,执行一系列语句,以及改变其参数值的独立过程,而与子过程不同的是:当要使用该函数的返回值时,可以在表达式的右边使用 Function 过程,这与内部函数,诸如 Sqr、Cos 或 Chr 的使用方式一样。
在表达式中,可以通过使用函数名,并在其后用圆括号给出相应的参数列表来调用一个 Function 过程。
要从函数返回一个值,只需将该值赋给函数名。在过程的任意位置都可以出现这种赋值。如果没有对 name 赋值,则过程将返回一个缺省值:数值函数返回 0,字符串函数返回一个零长度字符串 (""),Variant 函数则返回 Empty。如果在返回对象引用的 Function 过程中没有将对象引用赋给 name (通过 Set),则函数返回 Nothing。
2. 接下来以示例来看使用方法给一个名为 BinarySearch 的函数赋返回值。在这个示例中,将 False 赋给了该函数名,表示没有找到某个值。
Function BinarySearch(. . .) As Boolean
. . .
'值未找到,返回一个 False 值。
If lower > upper Then
BinarySearch = False
Exit Function
End If
. . .
End Function
3. 注意在 Function 过程中使用的变量分为两类:一类是在过程内显式声明的,另一类则不是。在过程内显式声明的变量(使用 Dim 或等效方法)都是局部变量。对于那些没有在过程中显式声明的变量,除非它们在该过程外更高级别的位置有显示地声明,否则也是局部的。
▲日期/时间CDate 将字符串转化成为日期 select CDate("2005/4/5")
Date 返回当前日期
DateAdd 将指定日期加上某个日期select dateAdd("d",30,Date())将当前日期加上30天,其中d可以换为yyyy或H等
DateDiff 判断两个日期之间的间隔 select DateDiff("d","2006-5-1","2006-6-1")返回31,其中d可以换为yyyy,m,H等
DatePart 返回日期的某个部分 select DatePart("d","2006-5-1")返回1,即1号,d也可以换为yyyy或m
Day 返回日期的d部分,等同于datepart的d部分
Hour 返回日期的小时
IsDate 判断是否是日期,是日期返回-1,不是日期返回0
Minute 返回日期的分钟部分
Month 返回日期的月份部分
Now 返回当前时间(完整时间,包括年月日 小时分秒)
Second 返回日期的秒部分
Time 返回当前的时间部分(即除去年/月/日的部分)
Weekday 返回某个日期的当前星期(星期天为1,星期一为2,星期二为3...),例如select weekday(now())
Year 返回某个日期的年份
▲检查
IsEmpty 检测是否为空(不过经测试,不管什么情况,都返回0)
IsNull 检测是否为Null值,null值返回0,非null值返回-1
IsNumeric 检测是否为数字,是数字返回-1,否则返回0
算术
Abs 绝对值
Atn 返正切值。
Cos 余弦值
Exp 返回 e 的给定次幂。
Fix 返回数字的整数部分(即小数部分完全截掉)
Int 将数字向下取整到最接近的整数。(其实等同于Fix)
Log 返回以E为底的对数值
Rnd 返回一个0到1之间的随机数值
Sgn 返回数字的正负符号(正数返回1,负数返回-1,0值返回0)
Sin 正弦值
Sqr 返回平方根值
Tan 正切值
▲程序流程
Choose 根据第一参数,返回后面字符串组的值,Select Choose(1,"a","b","c")返回a,将1改成2后,返回b,改成3后,返回c(第一个参数也可以是某个字段)
IIF 根据表达式返回特定的值 Select IIF("3>1","OK","False"),返回OK
▲Sql合计函数
Avg 取字段平均值
Count 统计记录条数
Max 取字段最大值
Min 取字段最小值
StDev 估算样本的标准差(忽略样本中的逻辑值和文本)。
StDevP 计算以参数形式(忽略逻辑值和文本)给出的整个样本总体的标准偏差。
Sum 计算字段的总合
Var 估算样本方差(忽略样本中的逻辑值和文本)。
VarP 计算整个样本总体的方差(忽略样本总体中的逻辑值和文本)。
▲文本
Asc 返回字母的Acsii值,select Asc("A")返回65
Chr 将ascii值转换到字符 select chr(65)返回"A"
Format 格式化字符串,Select Format(now(),'yyyy-mm-dd')返回类似于"2005-04-03" ,Select Format(3/9,"0.00")返回0.33
InStr 查询子串在字符串中的位置 select Instr("abc","a")返回1,select Instr("abc","f")返回0
LCase 返回字符串的小写形式
Left 左截取字符串
Len 返回字符串长度
LTrim 左截取空格
Mid取得子字符串 select mid("123",1,2) as midDemo 返回12
Right 右截取字符串
RTrim 右截取空格
Space 产生空格 select Space(4)返回4个空格
StrComp 比较两个字符串是否内容一致(不区分大小写)select StrComp("abc","ABC")返回0,select StrComp("abc","123")返回-1
Trim 截取字符串两头的空格
UCase 将字符串转大写
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fengloveyun/archive/2009/04/14/4071236.aspx
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)