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> [{[<rep>]/(<caminho>)/(0)}]
... <tipo>:<tamanho>[,<num_decimais>]
... [(<num_nivel_ler>,<num_nivel_grav>)]
... [{POS <nome_item_rd>[+<deslocamento>] /
... VIRTUAL (<nome_item_part>, ..., <nome_item_part>)}]
... [UNICA]
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:
[<rep>] É o fator de repetição de um item. A LDBD não permite que seja implementado itens multivalorados.
Para tanto, o usuário pode definir que um item seja repetido tantas vezes quanto for determinado em <rep>. <rep> consiste de um valor numérico inteiro contido entre colchetes.
Este recurso quando utilizado faz com que o DEFINE associe aos nomes do itens repetitivos, um número seqüencial que varia de 1 a <rep>.
Assim sendo, se o nome do item for telefone e o fator de repetição for 3, três itens serão criados com os respectivos nomes: telefone1, telefone2 e telefone3.
Observações:
<caminho>)
É o nome do arquivo Entidade com o qual o item de dados ira fazer associação (procedência). Indica que o item e uma chave estrangeira (Atributo Associativo / Item Associativo).
Este argumento define de forma declarada 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 alternativa, porém e for a 1a 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 alternativa que pode ser declarada tanto em arquivos tipo Entidade quanto em arquivos tipo relacionamento.
Observações:
<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
P Numérico compactado sem sinal
C Numérico compactado com sinal
I Numérico Binário (positivo)
B Numérico Binário (positivo/negativo)
F Numérico Ponto Flutuante (positivo ou negativo)
D,D2,D4 Data
L Lógico
M Multimídia (Objeto Binário Longo)
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.
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 |
P |
2 a 18 (par) |
1 a 9 |
Numérico |
Compactado |
C |
1 a 17 (impar) |
1 a 9 |
Numérico de 1 a 18 dígitos mais sinal |
Compactado |
I |
2 ou 4 |
2 ou 4 |
Numérico entre 0 e 2 |
Binário |
F |
4 a 8 |
4 a 8 |
Numérico de n dígitos. Se tb=4 então n=7 |
Ponto flutuante |
B |
1 ou 7 |
1 ou 7 |
Numérico entre –2(8*tb-1) e 2(8*tb-1)-1. |
Binário |
D |
2 |
2 |
Data no formato dd/mm/aa entre |
Binário |
D2 |
Data no formato dd/mm/aaaa entre |
Binário |
||
D4 |
Binário |
|||
L |
1 |
1 |
0 -> falso 1 -> verdadeiro |
Binário |
M |
4 (**) |
1 a 4 Gb |
String de Bits |
Binário |
(**) Itens tipo Multimídia (M4) são implementados pelo OpenBASE como arquivos em disco de tamanho variável. Caso o Arquivo de Dados possua este tipo de item, no diretório onde se encontra o arquivo de dados é criado um subdiretório que será composto por outros subdiretórios, tantos quantos a quantidade de itens Multimídia declarados no Arquivo de Dados.
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) |
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:
ÚNICA
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.
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