A declaração dos itens de dados e feita logo a seguir a declaração do arquivo de dados cujos itens de dados fazem parte do seu registro.
[REGISTRO:]
<nome_item> [ (<caminho>) | [ (0) | (<num>) | (*) ] ]
... <tipo><tamanho>[,<num_decimais>]
... [(<num_nivel_ler>,<num_nivel_grav>)]
... [UNICA] [NULO]
... [{POS <nome_item_rd>[+<deslocamento>]
... VIRTUAL (<nome_item_part>, ..., <nome_item_part>)}]
Declaração dos itens de dados. Opcionalmente para documentar o inicio das declarações dos itens de dados que compõem o registro de um arquivo de dados, utiliza-se a declaração da palavra REGISTRO seguida de dois pontos (:).
<nome_item> É o nome de um dos itens que compõem o registro do arquivo de dados o qual compõe-se de uma cadeia com até 12 caracteres com as seguintes restrições:
(<caminho>)
É o nome do arquivo Entidade com o qual o item de dados irá fazer associação (procedência). Indica que o item é uma chave estrangeira (Atributo Associativo / Item Associativo).
Este argumento indica o Relacionamento entre as Entidades e assim sendo, determina para o OpenBASE a obrigatoriedade do controle da Integridade Referencial.
Observações:
(0)
Indica que o item é uma chave secundária, porém se for a primeira chave de um arquivo tipo Entidade, define que a Entidade não possui ligações mas assume o papel de chave primária. Caso contrário corresponde a uma chave secundária que pode ser declarada tanto em arquivos tipo Entidade quanto em arquivos tipo relacionamento.
Observações:
(<num>)
Indica que o item é uma chave primária. Deve ser a primeira chave de um arquivo tipo Entidade e define que a Entidade possui <num> ligações.
(*)
Indica que o item é uma chave primária. Deve ser a primeira chave de um arquivo tipo Entidade e o número de ligações será calculado pelo DEFINE .
<tipo><tamanho>[,<num_decimais>]
Define o tipo e o tamanho do Item, assim como o número de casas decimais no caso do item suportar valores numéricos.
O tipo do item a ser declarado em <tipo>, consiste de uma letra, no qual pode ser:
U Universal
N Numérico sem sinal
S Numérico com sinal
I Numérico Binário (positivo)
B Numérico Binário (positivo/negativo)
F Numérico Ponto Flutuante (positivo ou negativo)
D Data
T Data-Hora
L Lógico
J Numérico Binário (auto-incremento)
M Memo (Objeto Binário Longo)
O Memo (Objeto Binário Longo)
O tamanho do item a ser declarado em <tamanho>, consiste de um valor numérico que varia em função do tipo do item. Este tamanho nem sempre representa o número de bytes para armazenar o conteúdo do item.
Para melhor compreensão, consulte a Tabela a seguir.
Tabela de Tipos e Tamanhos |
||||
Tipo item |
Tamanho a Declarar |
Tamanho em Bytes (tb) |
Valores Suportados |
Tipo Interno |
U |
1 a 2048 |
1 a 2048 |
Caracter (qualquer) |
Cadeia |
N |
1 a 18 |
1 a 18 |
Numérico |
Cadeia |
S |
1 a 18 |
1 a 18 |
Numérico de 1 a 18 dígitos mais sinal |
Cadeia |
I |
2, 4 ou 8 |
até 32767, até 4 ou 8 bytes |
Numérico entre 0 e 2 |
Binário |
F |
4 ou 8 |
4 ou 8 |
Numérico de n dígitos. Se tb=4 então n=7 inteiros |
Ponto flutuante |
B |
1 a 7 |
1 a 7 |
Numérico entre -2*(8*tb-1) e 2*(8*tb-1)-1. |
Binário |
D |
2(*) | 2 |
Data no formato dd/mm/aaaa entre |
Binário |
D |
4 | 4 |
Data no formato dd/mm/aaaa entre |
Binário |
D |
7 |
7 |
Data-hora no formato dd/mm/aaaa-hh:mm:ss |
Binário |
L |
1 |
1 |
0 -> falso 1 -> verdadeiro |
Binário |
M |
4 (**) |
1 a 4 Gb |
String de Bits |
Binário |
O |
4 (***) |
1 a 4 Gb |
String de Bits |
Binário |
(*) No OpenBASE um item de dado do tipo D2, só aceita datas compreendidas entre 01/01/1901 e 04/06/2080, inclusive, na conversão de uma variável de memória para o item D2 do banco. Caso a data esteja fora deste intervalo, é emitida a mensagem "OPUS(varite) => Estouro na conversão numérica". Para datas com tipo D4 esta conversão pode ser feita para datas dentro ou fora do intervalo mencionado anteriormente.
O item D4 indica uma data no formato aaaa/mm/dd onde aaaa ocupa 2 bytes, mm 1 byte e dd 1 byte. O dia 1 é considerado 01/01/0001. A data 31/12/1900 ainda é considerada como data nula para se manter compatibilidade com o tipo D2.
Para sua utilização na OPUS em conjunto com as datas tipo D2 foram feitas as seguintes alterações:
DTOC
Para itens do banco do tipo D2 retorna uma cadeia de caracteres no formato dd/mm/aa se set century off e 1901 <= ano <= 1999. Caso contrário retorna uma cadeia no formato dd/mm/aaaa.
Para itens do banco do tipo D4, retorna uma cadeia no formato dd/mm/aaaa, mesmo para datas menores do que 1901 e datas maiores do que 1999.
CTOD
Considera uma cadeia no formato dd/mm/aa como dd/mm/19aa.
Conversão de variável para item do banco.
Se tipo D2, 01/01/1901 <= data <= 04/06/2080, caso contrário é emitida a mensagem OPUS (varite) => Estouro na conversão numérica.
Conversão do tipo do item D2 para D4.
Os itens tipo D2 de um banco de dados podem ser descarregados e carregados no mesmo banco de dados com os itens alterados de tipo D2 para tipo D4.
(**) Itens tipo memo (M4) são implementados pelo OpenBASE como arquivos externos ao banco. No diretório onde se encontra o arquivo de dados, para cada item memo é criado um subdiretório que conterá um arquivo externo para cada valor do item.
A aplicação deste tipo de item destina-se a armazenar textos longos, imagens ou sons.
(***) Itens tipo memo (O4) são implementados ciando-se um arquivo no banco para cada item O4, para conter objetos longos (texto ou imagem) associado a cada valor do item O4.
São criados automaticamente um arquivo para cada item O4. Os nomes dos arquivos são formados de oo + nome do arquivo + nome do item.
Os valores dos itens chave dos arquivos ooarqobj1 e ooarqobj2 são os valores dos itens obj1 e obj2 quando diferentes de zero.
A aplicação deste tipo de item destina-se a armazenar textos longos, imagens ou sons.
Se o item suportar valores numéricos é possuir casas decimais, o número de casas decimais e informado em <num_decimais>, que consiste de um valor numérico entre 1 a 18. Neste caso, o separador entre o tamanho do item e as casas decimais é obrigatoriamente a vírgula (,).
As casas decimais são virtuais, assim sendo, internamente, o valor contido em <tamanho>, corresponde ao conteúdo do item com suas respectivas casas decimais: internamente não apresenta separador entre a parte inteira e as casas decimais.
(<num_nivel_ler>,<num_nivel_grav>)
Especifica um par de números inteiros que declaram o nível de privacidade para leitura e gravação do item de dados.
<num_nivel_ler>
É o número do nível de leitura que consiste de um número de nível declarado anteriormente em nível, tem que ser menor ou igual ao nível de gravação.
<num_nivel_grav>
É o número do nível de gravação que consiste de um número de nível declarado anteriormente em nível, tem que ser maior ou igual ao nível de leitura.
Os níveis de leitura e gravação estão associados às suas respectivas palavras de níveis e funcionam da maneira seguinte: Na abertura do Banco de Dados, o usuário declara a sua palavra de nível e o OpenBASE converte esta palavra para o número do nível associado à palavra (Numero de Nível do usuário - NNU). Desse modo, permite consistir se o usuário tem ou não autorização para ler ou gravar (atualizar) o item. Assim sendo, se NNU for maior ou igual ao nível de leitura do item, o usuário pode ler o item. Se NNU for maior ou igual ao nível de gravação, o usuário pode gravar o item.
Caso o usuário, num procedimento de leitura não seja autorizado a acessar o item, o valor de retorno do item é mascarado em função do seu tipo. Veja tabela abaixo.
Tipo dos itens |
Máscaras |
U |
Brancos |
N,S,P,C,I,B.F |
Cadeia de dígitos preenchida com o número nove (999999999) |
D,D2,D4 |
Data em branco ("//") |
L |
Falso (zero) |
UNICA
Estabelece restrição de unicidade para chave secundária (chave única).
Não pode ser declarado em chaves primárias devido ao fato deste tipo de chave ser única por definição.
NULO
Indica que o valor pode ser nulo. O primeiro byte do valor contém 0 ou 1 para indicar esta condição.
Não pode ser declarado em chaves primárias
POS <nome_item_rd> [ + <deslocamento> ]
Define que o item é uma redefinição de um outro item de dados, permitindo assim que um item seja decomposto em subitens ou que um item seja composto por itens contíguos.
A implementação da redefinição de um item baseia-se na superposição de itens na mesma área de registro. Assim sendo, um item que redefine um outro, não ocupa espaço adicional no registro, em função de utilizar a mesma área de registro ocupada por um ou mais itens já declarados.
<nome_item_rd> É o nome do item a ser redefinido que consiste do nome de um item já existente (não pode ser o nome de um item repetitivo).
<deslocamento> É o deslocamento em bytes, em relação a posição inicial do item a ser definido que consiste de um número inteiro.
Se <nome_item> iniciar na mesma posição de registro, ocupada por <nome_item_rd>, não é necessário informar o <deslocamento>.
VIRTUAL (<nome_item_part>, ..., <nome_item_part>)
Define que o item é um item virtual.
A implementação de itens virtuais, baseia-se na montagem em memória da composição de itens. Assim sendo, itens virtuais não ocupam espaço adicional no registro.
<nome_item_part>, ..., <nome_item_part>) É a lista dos nomes dos itens que compõem o item virtual.
Observações sobre itens virtuais:
NOME: arq_dpto E << Entidade Departamento >>
<< Declaração dos itens da Entidade Departamento >>
sigl_dpto (1) u2
nome_dpto u30
NOME: arq_func E << Entidade Funcionário >>
<< Declaração dos itens da Entidade Funcionários >>
matr_func (1) u5
nome_func u30
data_nasc u6
dian u2 POS data_nasc
mesn u2 POS data_nasc + 2 <<ou POS dian + 2 >>
anon u2 POS data_nasc + 4 <<ou POS mesn +2 >>
sexo_func(0) u1
salario [12] B4,2 (5,10)
cpf_func (0) u11 UNICA
chave_aux(0) u4 VIRTUAL (anon, mesn)
NOME: arq_lota R << Relacionamento Lotação >>
<< Declaração dos itens do Relacionamento Lotação >>
dpto_lota (arq_dpto) u2
func_lota (arq_func) u5
data_lota d2