现在的位置: 首页 > 综合 > 正文

对NULL的彻底解释

2013年08月26日 ⁄ 综合 ⁄ 共 1415字 ⁄ 字号 评论关闭

NULL代表不知道或者没有定义,和空值完全不同。例如,在数据库中某字段取值为NULL,代表用户还没有处理这个字段的数据,有待于处理;而如果该字段取值为空,代表这个字段的数据用户做了处理,这个字段的取值是清楚的。
当变量定义后,变量没有取值,应该为NULL,但实际上不是这样。PowerBuilder为每种类型的变量都规定了默认值,当刚刚定义了某类型的变量时,该变量的取值为这种类型变量的默认值。如integer类型的默认值为0,string类型的变量的默认值为“”。
大多数情况下,NULL和数据库打交道时才经常使用。当某个取值为NULL的字段取值读入到变量时,该变量被置为NULL。也可以通过函数将变量的值置为NULL,但是不能直接把NULL赋值给变量。任何类型的变量都可以被赋值为NULL,NULL是一个非常特殊的值。函数用法是:
SetNull(变量名)
执行成功时返回1,否则返回-1。
例如:
String ls_name//此时变量ls_name的取值为“”
SetNull(ls_name)//ls_name变量此时为NULL
判断某变量的取值是否为NULL时,使用函数IsNull(变量名),不能使用“=”来判断。例如“if ls_name=NULL then…”是不正确的,“if IsNull(ls_name) then …”是正确的。当某布尔表达式的取值为NULL时,PowerScript处理为False。例如,下面的语句都不能执行beep(1)语句:
Int     li_Nbr
// Set li_Nbr to NULL.  
SetNull(Nbr)  
If li_Nbr =1 Then Beep(1)  
If li_Nbr <> 1 Then Beep(1)
If Not (li_Nbr = 1) Then Beep(1)
正因为NULL的特殊性,在条件语句中判断时要备加小心。例如,下面的语句就能正确执行ELSE中的信息显示:
Int li_count
SetNull(li_count)  
If li_count = 1 Then
       MessageBox("Value", "li_count= 1")
Else
      MessageBox("Value", "li_count= NULL")
End If
但是,如果把上面的语句做语法上的等价修改,就什么显示信息也没有:
Int li_count
SetNull(lli_count)  
If li_count = 1 Then MessageBox("Value", "li_count= 1")
If li_count <> 1 Then MessageBox("Value", "li_count= NULL")
当字符串的联接运算中有NULL时,取值也为NULL。例如:
String ls_name,ls_temp

SetNull(ls_temp)
Ls_name = "张三"
Ls_name = ls_name + ls_temp
If IsNull(ls_name) Then MessageBox("提示","空值!")
函数MessageBox()经常用来显示一定的信息,和用户交互时经常使用。如果要显示的信息是NULL时,提示窗口不会显示。例如,下面语句执行时,没有任何的信息提示窗口:
String ls_name,ls_temp

SetNull(ls_temp)
Ls_name = "张三"
If IsNull(ls_name) Then MessageBox("提示",ls_name + ls_temp)

抱歉!评论已关闭.