Pode usar ficheiros físicos para definir tabelas, criar código executável, etc. Vamos ver agora os aspectos básicos necessários para trabalhar com ficheiros.
Após a criação de uma tabela em SQL vamos criar as restantes com código DDS.
Os ficheiros de sources são ficheiros que podem ter vários membros. Cada membro representa o código fonte de um objecto executável ou um objecto executável.
Podemos dizer que um ficheiro de sources é uma especie de pasta onde organizamos os vários ficheiros com o código propriamente dito e com os respectivos objectos executáveis (isto depois de se terem compilado os ficheiros fonte).
Por convenção os ficheiros source seguem um certo padrão:
- QRPGLESRC – ficheiro que guarda os membros escritos em linguagem RPG-ILE
- QDDSSRC – guarda os membros escritos em DDS
- QRPGSRC – ficheiro que guarda os membros escritos na linguagem RPG tradicional.
Como é possivel ver os nomes começam sempre por Q e terminam em SRC. Não é obrigatório seguir estas definições, nem existe nenhum problema ao nível do sistema se existir, por exemplo, um membro RPG no ficheiro QDDSSRC, mas por uma questão de organização e por ser uma convenção plenamente estabelecida é aconselhável segui-la.
Vamos então criar o nosso ficheiro de sources de DDS para depois criarmos a nossas tabelas.
CRTSRCPF FILE(DEMO/QDDSSRC)
Se se encontrar na biblioteca DEMO não precisa especificá-la, escreva apenas o nome do ficheiro.
PDM (Programming Development Manager)
Vamos agora usar o utilitário PDM que nos ajuda a criar o código fonte e compilá-lo. O PDM utiliza o editor de texto SEU (Source Entry Utility), que mais à frente veremos como utilizar.
STRPDM
Deve surgir um ecrã semelhante a este:
Escolha a opção '3. Work with members', pois vamos criar alguns membros do ficheiro QDDSSRC. A opção 2 permite trabalhar com objectos executáveis e a 1 com bibliotecas.
O menu seguinte pede-lhe o nome do ficheiro com que pretende trabalhar e a biblioteca onde este se encontra. Insira QDDSSRC no ficheiro e DEMO na biblioteca.
Note que apesar de no PDM estar a ver ficheiro de uma dada biblioteca não está necessariamente colocado dentro dela. Pode estar na biblioteca DEMO1 a ver ficheiros da biblioteca DEMO2, por exemplo.
Deve-lhe surgir o menu onde pode encontrar todas as opções para trabalhar com os membros do ficheiro.
Vamos então criar o nosso primeiro membro. Carregue em F6 (como pode ver nas opções em baixo “F6=Create”). Escreva os dados como vê na imagem em baixo:
Trabalhar com o SEU (Source Entry Utility)
Ecrã do SEU:
A linguagem DDS e RPG são linguagens posicionais o que significa que cada elemento têm uma linha e coluna específica onde deve ser colocado. No entanto, o SEU dá uma ajuda a colocar cada opção no seu lugar. Se colocar o cursor numa linha qualquer e carregar F4 aparecer-lhe-á um prompt como o da figura seguinte onde puderá por os valores directamente e o SEU faz a colocação de cada campo no sítio correcto. Se quiser fechar o prompt carregue F12.
Inserir nova linha
Coloque um caracter 'i', sem plicas, em qualquer posição da coluna numerada à esquerda. Ao carregar ENTER é inserida uma nova linha imediatamente abaixo.
Apagar uma linha
Escreva o carácter 'd', sem plicas, em qualquer posição da coluna numerada à esquerda e prima ENTER.
Apagar um conjunto de linhas
Para apagar um conjunto de linhas seguidas de uma só vez insira, na coluna numerada à esquerda, 'dd' na primeira linha que quer apagar e na última, prima ENTER .
Sintaxe DDS
Vamos começar por definir o ficheiro SHOPS como está em baixo e de seguida apresenta-se detalhadamente as instruções linha a linha.
UNIQUE
R SHOPR
ID_SHP 10P
NAME_SHP 25A
MANAGER_SH 50A
K ID_SHP
Linha 1
Temos de especificar o comando UNIQUE para a primeira linha da definição da tabela, para nos certificarmos que a chave primária tem um valor único para cada registo. Carregue em F4 e escreva unique no campo functions.
Linha 2
Definição do tipo de registo do ficheiro. O tipo de registo serve para identificar todas os campos do ficheiro, vamos ver um exemplo do seu uso mais à frente nos display files. Insira uma nova linha como explicado anteriormente e carrega em F4 novamente. A letra 'R' deve constar no campo Name Type e SHOPR no Name.
Linhas 3, 4 e 5
Definem os campos da tabela. Na linha 3, por exemplo, ID_SHP é o Name, 10 é a Length do campo (deve estar alinhado à direita), P é o tipo de dados que vão ser guardados (Data Type), neste caso um valor numérico.
Os tipos de dados mais comuns:
- A - Alfanumérico
- S – Numérico (Zoned Decimal)
- P – Numérico (Packed Decimal)
- L - Data
Para mais informações sobre os tipos de dados carregue em F1 quando tiver o cursor no campo Data Type.Ou consulte a Referência ILE RPG.
Linha 6
Definição do campo chave, com 'K' no Name Type e o nome do campo exactamente como foi definido acima no campo Name. Para definir mais que uma chave basta definir uma linha começada por 'K' para cada uma das chaves.
Quando tiver o seu ficheiro completo carregue em F3 para sair e confirme que quer guardar as alterações.
Funções úteis DDS
Se quiser usar alguma destas funções deve colocá-la no campo functions.
CHECK
- CHECK(AB): Permite que o campo tenha o valor nulo. (Allow Blank).
- CHECK(ME): Obriga a que seja inserido um valor no campo (Mandatory Enter).
- CHECK(MF): Obriga a que todos os caracteres do campo sejam preenchidos (Mandatory Fill).
COMP
Permite fazer comparações de valores. A sintaxe é COMP(operador-relacional valor). Onde o operador relacional pode tomar os seguintes valores:
- NL (not less than)
- GT (greater than)
- NG (not greater than)
- LE (less than or equal to)
- GE (greater than or equal to)
DATFMT
Especifica o formato que uma data irá tomar. As possibilidade são:
- *ISO: yyyy-mm-dd
- *EUR: dd.mm.yyyy
- *USA: mm/dd/yyyy
- *MDY: mm/dd/yy
- *DMY: dd/mm/yy
- *YMD: yy/mm/dd
TIMFMT
Especifica o formato que uma hora irá tomar. As possibilidade são:
- *ISO: hh.mm.ss
- *EUR: hh.mm.ss
- *USA: hh:mm AM/PM
- *HMS: hh:mm:ss
RANGE
Define o valor máximo e mínimo que um campo pode tomar.
Exemplos:
- Para um campo numérico: RANGE(4 9)
- Para um campo não numérico: RANGE('4' '9')
VALUES
Permite especificar todos os valores válidos num campo.
Exemplo:
- Para um campo numérico: VALUES(4 5 6 7 8 9)
- Para um campo não numérico: VALUES('a' 'b' 'c' 'd')
DFT
Especifica um valor por defeito.
REFFLD
Define que um campo está a referenciar outro de outra tabela. Nestes casos não se define nem o tipo de dados nem o comprimento e coloca-se um 'R' no campo Ref do prompt.
Exemplo:
CARD_MOV R REFFLD(ID_CRD DEMO/CARDS)
Compilação de ficheiros
Para criar o objecto que vai realmente guardar os dados (como já foi dito atrás, este ficheiro guarda só o codigo fonte) escolha a opção '14-Compilar' para o ficheiro que acabou de criar.
Este tutorial não vai incidir sobre a análise dos ficheiros resultantes da compilação, mas se se quiser aventurar e tentar analisar os ficheiros pode fazê-lo escrevendo o comando WRKSPLF (Work Spool File) no prompt. As mensagens mais importantes da compilação aparecem usualmente no final do ficheiro com o mesmo nome que o ficheiro que acabou de compilar (a compilação mais recente aparece mais abaixo na lista).
Uma maneira rápida de verificar se a compilação foi bem sucedida é confirmar a criação do ficheiro. Para isso vá à opção '2-Work with Objects' do menu inicial do PDM e coloque as opções como estão descritas na imagem seguinte e pressione Enter.
Agora verifique se existe na lista um membro com o nome SHOPS (o mesmo que deu ao membro com o código fonte).
Tenha no entanto atenção que isto só funciona correctamente para a primeira compilação, porque um objecto mantém-se sempre com os dados da última compilação bem sucedida. Portanto se for alterar o seu ficheiro e compilá-lo novamente, mesmo que a compilação resulte em erro, o ficheiro continua a existir no sistema. Pode no entanto apagá-lo antes da compilação (no mesmo menu onde vai verificar a sua existência), assim certifica-se que o ficheiro resultou da última compilação.
Tem agora toda a informação necessária para conseguir criar ficheiros DDS. Crie o ficheiro CARDS e MOVEMENTS, usando os nomes que são dados no modelo de dados, pois vamos usá-los mais a frente. Quanto terminar, ou se surgir alguma dúvida, pode consultar os ficheiros com o resultado final.
Para informações mais pormenorizadas sobre os ficheiros DDS visite os recursos da IBM.