Permitir que um ítem de dado armazene um valor desconhecido ou não informado.
Os tipos de itens de dados que aceitam valor nulo, são:
<nome_item> [{[<rep>] / (<ligações>) / (<caminho>)/(0)}]...
... <tipo>:<tamanho>[,<num_decimais>] ... | |
... [(<num.nivel_ler>,<num_nivel_grav>)] ...
... [{POS <nome_item_rd>[+ <deslocamento>] /...
... VIRTUAL (<nome_item_part>, ..., <nome_item_part>)}] ...
... [NULO] [ATU = {C/S/R/}] [DEL = {C/R/S}][UNICA]
Nenhum
Um item nulo, possui um byte a mais do que seu tamanho original, pois o primeiro byte indica se o item é nulo( byte binário é zero) ou não( byte binário é um).
Para se atribuir um valor nulo a um item do tipo U, A ou D( sem $date), utilize a constante cadeia NULLCHAIN que eqüivale a uma cadeia vazia(""). Para se atribuir um valor nulo a um ítem nulo do tipo numérico, utilize a constante numérica NULLNUMBER, que equivale ao número –999999999999999999.
Para se saber se o ítem lido é nulo ou não, basta compará-lo a NULLCHAIN se este item for do tipo U,A,D(sem $date) ,ou a NULLNUMBER caso este ítem seja numérico.
Um item virtual que possua algum componente nulo, também será nulo.
Ao se utilizar o geral, os valores nulos são exibidos como ????...?
Se for utilizada a máscara "????....?" um item nulo será exibido como ????..?
banco bdteste 1
nome:arq1 e
cod1(0) n5
nome u21 nulo
salario n10,2 nulo
admiss d8 nulo
*
**********************************
Carga do banco definido acima
**********************************
prog
database bdteste 1 a 2
select a
use arq1
locate
for i = 1 to 10
if (i%2) = 0
replace cod1 with i,;
nome with "Teste" ,;
salario with 2000,;
admiss with date()
insert
if dberr() # 0
? dbmens()
endif
else
replace cod1 with i,;
nome with NULLCHAIN,;
salario with NULLNUMBER,;
admiss with NULLCHAIN
insert
if dberr() # 0
? dbmens()
endif
endif
next
return
*************************************************************************
Lê os dados carregados pelo programa acima
*************************************************************************
prog
database bdteste 1 a 2
use arq1
locate
Do While .not. eof()
@01,02 say cod1
if nome = NULLCHAIN
@01,10 say " Nome NULO"
else
@01,10 say nome
endif
if salario = NULLNUMBER
@03,10 say " Salario NULO"
else
@03,10 say salario
endif
if admiss = NULLCHAIN
@05,10 say " Data NULA"
else
@05,10 say admiss
endif
wait
continue
Enddo