Histórico da Página
...
O desenvolvimento e compilação das aplicações desenvolvidas em 4GL são realizadas via ferramenta de desenvolvimento Totvs Developer Studio disponivel disponível para download na central de download da página de suporte da TOTVS.
...
Os elementos das variáveis tipo ARRAY podem ser acessadas através do operador [] (colchetes) e dá indicação do número do elemento a que se quer ter acesso, assim:
la_dados[10] |
Neste caso representa o 10º elemento do ARRAY la_dados.
Para acessar um elemento de uma variável do tipo ARRAY do tipo RECORD utiliza-se o “.” (ponto) após a determinação da posição desejada do ARRAY, assim:
la_dados[5].codigo |
Neste caso, representa o valor da variável “codigo” pertencente ao 5º elemento do ARRAY la_dados.
Para acessar um conjunto de caracteres de uma variável do tipo CHAR, sendo esta um componente de um ARRAY do tipo RECORD, utiliza-se o ponto após a determinação da posição desejada do ARRAY e o operador “[]” (colchetes) para determinar o conjunto de caracteres desejados da variável tipo CHAR, assim:
la_dados[3].descricao[5,10] |
Neste caso está se obtendo o conjunto de caracteres da posição 5 até a 10 da variável descrição pertencente ao 3º elemento da variável la_dados (ARRAY do tipo RECORD).
As variáveis podem ser locais a uma função, globais a um módulo (modulares) ou programa (globais).
...
varlocal.4gl MAIN FUNCTION mostra_local() FUNCTION mostra_local_agora(l_inteiro) RESULTADO: |
Exemplo com variáveis locais
Se declarar duas variáveis com o mesmo nome em duas funções distintas, cada variável somente será reconhecida na função de declaração. Concluindo, as variáveis com o mesmo nome localizadas em funções diferentes são variáveis diferentes.
...
GLOBALS "fonte.4gl" OU GLOBALS |
Definição genérica de uma declaração global
Como se pode ver acima, a instrução GLOBALS tem duas formas possíveis. Na primeira indica-se o nome de um fonte que contém um conjunto de instruções DEFINE e uma instrução DATABASE. A vantagem deste sistema é o conhecimento das variáveis globais em todos os módulos sem necessidade de declará-las em cada um deles.
...
varglob1.4gl GLOBALS MAIN
varglob2.4gl GLOBALS FUNCTION mostra_varglob2() RESULTADO: |
Exemplo com variáveis globais
No programa dado como exemplo não havia grande necessidade de declarar as variáveis como globais. Á medida que for programando pode-se sentir a necessidade de utilizar este tipo de variável.
...
varmod1.4gl DEFINE m_inteiro INTEGER MAIN varmod2.4gl DEFINE m_inteiro INTEGER END FUNCTION RESULTADO |
Exemplo com variáveis modulares |
...
Uma expressão booleana usada no WHILE é idêntica a usada no IF e a qualquer outra que se utilize num programa.
WHILE esta <> "bebado" |
Ciclo WHILE
...
A função UPSHIFT pode ser usada numa expressão ou para atribuição a uma variável com o valor devolvido pela função.
LET l_str = UPSHIFT(l_str) |
Exemplo de utilização da função UPSHIFT
...
PROMPT mensagem FOR [CHAR] variável |
Definição genérica da instrução PROMPT
As mensagens assinaladas são um conjunto de uma ou mais variáveis, ou string(s) constantes, separados por vírgula.
...
Se pretender enviar pequenas mensagens ao usuário utiliza-se no 4GL a instrução DISPLAY AT.
DISPLAY lista_de_variaveis |
Definição da instrução DISPLAY AT
...
Os atributos possiveis são:
...
WHITE
| REVERSE |
Atributos de tela possíveis
A instrução DISPLAY é complexa e no capítulo sobre gestão de telas será novamente abordada.
Esta instrução envia para a tela uma mensagem constituída por um conjunto de variáveis e strings definidas na instrução. Em alguns dos exemplos anteriores, esta instrução já foi usada na sua forma mais simples.
displaydisplay.4gl MAIN MAIN
$ $ fglpc display.4gl
Isto vai aparecer na tela na linha 10 coluna 3 |
Programa utilizando DISPLAY AT com ATTRIBUTES
5.4 Exercício – Instrução PROMPT e MENU
...
No 4GL existe a instrução WHENEVER que permite alterar a forma como o programa se comporta ao ser confrontado com uma situação de erro ou aviso (warning).
...
WHENEVER {ERROR | WARNING} |
Definição genérica da instrução WHENEVER
A primeira opção na cláusula (ERROR/WARNING) informa sobre a situação de erro ou aviso para a qual se vai tomar determinada ação, se ocorrer. Numa situação de erro (ERROR), pede-se ao programa que efetue determinada tarefa que ele não pode efetuar dessa forma e nesse contexto, a instrução WHENEVER é utilizada com a cláusula ERROR. Numa situação de aviso (WARNING), a tarefa pode ser cumprida ainda que não seja uma situação usual e então a instrução WHENEVER é invocada com a cláusula WARNING.
...
Quando for encontrada esta situação, o programa deve continuar a partir da instrução assinalada por uma label. Um label é assinalado colocando-se um nome de label qualquer seguido do caracter ":" (dois pontos).
FUNCTION FUNCTION exp() RETURNRETURN LABEL erro:
|
WHENEVER com GOTO
CALL nome_de_função
Quando for encontrada uma situação de erro, é executada a função nome_de_função.
FUNCTION FUNCTION exp() RETURN END FUNCTION
FUNCTION erro() END FUNCTION END FUNCTION |
Exemplo de WHENEVER com CALL
STOP
Quando é utilizada a cláusula STOP, o programa ao ser confrontado com uma situação de erro ou aviso cujo código de erro seja negativo (sqlca.sqlcode < 0 ou status < 0), o programa é abortado e enviada para a tela uma pequena explicação do erro ocorrido.
...
As vezes a variável STATUS não chega a identificar o erro ou aviso que ocorreu. Neste caso existe um RECORD global chamado SQLCA, que identifica os tipos de erros e avisos. Geralmente usa-se a estrutura SQLCA como adicional ao STATUS que identifica a existência de erro.
...
SQLCA RECORD |
RECORD SQLCA
O significado de cada uma das variáveis é:
SQLCODE: Indica o resultado de uma instrução de SQL.Toma os valores:
...
O fluxo de informação de uma tela para a base de dados poderia ser descrito pelo seguinte esquema:
+-------+ +---------------------------------+ |
Comunicação das telas com o banco de dados
7.1 FORM
As forms servem para desenhar e processar entrada de dados.
...
Uma form é um programa que se compila com o comando "form4gl" e gera um executável com a extensão .frm. A execução do .frm é feita pelo programa 4GL que, durante a execução abre e manipula a form por intermédio de instruções próprias.
+----------+|
+----------+
+----------+ |
Compilação de uma form
7.2 Definição de uma form
Através de um editor de texto define-se um arquivo com a definição da form no seguinte formato:
DATABASE DATABASE [FORMONLY | <nome banco dados>] [TABLES] <tabelaN> <tabelaN> ATTRIBUTES [INSTRUCTIONS] |
Exemplo de definição de form
Estas seções são o esqueleto de qualquer form. Manipulando e inserindo instruções nestas seções consegue-se criar e explorar as capacidades das forms.
...
Quando é utilizada a cláusula DATABASE FORMONLY esta seção não é definida.
...
TABLES <tabelaN> <tabelaN> |
Definição da seção TABLES
7.2.4 Seção ATTRIBUTES
...
Este atributo faz com que o cursor, durante uma instrução de INPUT, salte para o campo seguinte quando o campo atual estiver totalmente preenchido.
f011 f011 = livros.data_entrada, AUTONEXT; |
Exemplo atributo AUTONEXT
7.2.4.2 COMMENTS
Este atributo associa uma mensagem a um campo. Esta mensagem aparecerá na linha correspondente da tela sempre que o cursor estiver posicionado sobre o respectivo campo.
...