Office中国论坛/Access中国论坛

标题: 请教一个函数问题 [打印本页]

作者: guoya    时间: 2003-7-24 06:34
标题: 请教一个函数问题
我写了一个根据有无文件代字以及时间格式确定文号内容的函数,但是我在报表中利用此函数执行时,如果第一个判断为真时,也就是没有文件代字时,总是显示错误,而没有像预想的那样"wh"为空字符串,请问错在那里?
Public Function WH(Wjdz As String, Wjdate As String, Wjxh As Integer)
'wjdz:文件代字,wjdate:时间,whxh:文件顺序号
If IsNull(Wjdz) = True Or Wjdz = "" Then '如果文件没有代字,那么文号为空
    WH = ""
Else:
    If IsDate(Wjdate) = True Then '如果文件时间符合日期格式
        WH = Wjdz & "[" & Year(Wjdate) & "]" & Wjxh & "号"
        '比如,wjdz="中发";wjdate="2003-07-01";wjxh="8",文号为"中发[2003]8号"
        Else:
        WH = Wjdz & "[" & Left(Wjdate, 4) & "]" & Wjxh & "号"
        '比如,wjdz="中发";wjdate="20030701";wjxh="8",文号为"中发[2003]8号"
    End If
End If
End Function
作者: chenghai    时间: 2003-7-24 15:56
IsNull(Wjdz) = True 可能有问题。(但我测试过)
可以直接使用IsNull(Wjdz) 的。
作者: Trynew    时间: 2003-7-24 16:23
你这是把Null值赋给一个String时出错。有两个办法:
1、用Variant代替String参数类型,可以接受Null值。
Public Function WH(Wjdz As String, Wjdate As String, Wjxh As Integer)
改为:Public Function WH(Wjdz As Variant, Wjdate As String, Wjxh As Integer)

2、在赋值给函数的参数时判断处理Null值,如用Nz函数:
    MyWh=WH(Nz([wjdz]),[Date],[WJXH])

作者: guoya    时间: 2003-7-25 06:51
非常感谢楼上的指点,何时我发现还是出现错误的内容[attach]1253[/attach]
作者: Trynew    时间: 2003-7-25 17:26
因为你的文件序号字段为空引起。注意其它两个参数也要用NZ()转换或其他方法处理一下(你是戴了帽子,忘了穿裤:)。
Null值不处理好,经常会出些意想不到和莫名其妙的Bug,为了防止Null值引起错误,除了用ISNull()判断,NZ()转换,使用Variant变体类型外,还有就是把字段定义为不允许空值,以及加上错误捕捉语句。


作者: guoya    时间: 2003-7-26 20:29
原来如此,我懂了,非常感谢!
我将Public Function WH(Wjdz As String, Wjdate As String, Wjxh As Integer)
改为:Public Function WH(Wjdz As Variant, Wjdate As Variant, Wjxh As Variant)成功




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3