當變量定義後,變量沒有取值,應該爲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)