Upload
jeferson-damasceno-rosa
View
113
Download
12
Embed Size (px)
Citation preview
PROGRAMAO EM INFORMIX 4GL
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 2 / 103
MoreData Ttulo: Programao Informix 4GL Autor: Srgio Ferreira
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 3 / 103
INDICE
1. A LINGUAGEM 4GL.................................................................................................................................... 4 2. RDSQL - BREVE REVISO DAS NOES............................................................................................... 7 3. ESTRUTURA DE UM PROGRAMA ......................................................................................................... 12
3.1. Fluxo do programa................................................................................................................................. 12 3.2. Tipos e converses de tipos ................................................................................................................... 13 3.3. Variveis................................................................................................................................................ 14 3.4. Funes.................................................................................................................................................. 19 3.5. Mdulos................................................................................................................................................. 22 3.6. Converses de tipos ............................................................................................................................... 23
4. CONTROLO DE SEQUNCIA................................................................................................................... 25 4.1. IF...THEN...ELSE...END IF.................................................................................................................. 25 4.2. WHILE .................................................................................................................................................. 26 4.3. FOR ....................................................................................................................................................... 27 4.4. CASE..................................................................................................................................................... 27
5. A BIBLIOTECA 4GL ................................................................................................................................. 31 6. I/O BSICO ................................................................................................................................................. 35
6.1. Prompts.................................................................................................................................................. 35 6.2. Menus .................................................................................................................................................... 36 6.3. Display at............................................................................................................................................... 37
7. GESTO DE ERROS ................................................................................................................................. 39 7.1. Como apanhar o erro ............................................................................................................................. 39 7.2. A varivel status .................................................................................................................................... 40 7.3. A estrutura SQLCA ............................................................................................................................... 41
8. GESTO DE ECRANS EM 4GL ............................................................................................................... 43 8.1. FORM.................................................................................................................................................... 44 8.2. O PERFORM Default............................................................................................................................ 45 8.3. O form4gl, a instruo INPUT e as suas Capacidades .......................................................................... 47 8.4. Outras capacidades da instruo INPUT e outros attributes das forms ................................................. 56
9. INTERACO DO 4GL COM AS BASES DE DADOS.......................................................................... 60 9.1. Gesto de cursores ................................................................................................................................. 60 9.2. Gesto de instrues dinmicas de RDSQL .......................................................................................... 67
10. O GESTOR DE JANELAS ....................................................................................................................... 69 10.1. OPEN WINDOW ................................................................................................................................ 69 10.2. CLOSE WINDOW .............................................................................................................................. 69 10.3. CURRENT WINDOW ........................................................................................................................ 70 10.4. OPTIONS ............................................................................................................................................ 70
11. GESTO DE CRANS 2 PARTE......................................................................................................... 71 11.1. Instruo CONSTRUCT...................................................................................................................... 71 11.2. Instruo DISPLAY ARRAY.............................................................................................................. 71 11.3. Form para utilizao de DISPLAY ARRAY....................................................................................... 72 11.4. Gesto da form com DISPLAY ARRAY ............................................................................................ 73 11.5. Instruo INPUT ARRAY................................................................................................................... 75 11.6. Seco DEFINE................................................................................................................................... 81
12. AMBIENTE INFORMIX-4GL .................................................................................................................. 94 13. INTERACTIVE DEBUGGER .................................................................................................................. 98
13.1. Como executar o I.D............................................................................................................................ 98 13.2. Ecrans do I.D. ...................................................................................................................................... 98
14. CONVENES UTILIZADAS NO MANUAL....................................................................................... 99 15. ALGUMAS CONVENES PROPOSTAS ........................................................................................... 100 16. BASE DE DADOS DE EXEMPLO DESTE MANUAL ......................................................................... 101
16.1. Estrutura da base de dados................................................................................................................. 101
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 4 / 103
1. A LINGUAGEM 4GL
O Informix 4GL surge como um dos produtos da famlia Informix destinados a explorar bases de
dados relacionais Informix.
A famlia Informix constituda por um gestor de base de dados com duas verses diferentes do
baixo nvel (standard com C-ISAM e ON-LINE) e um conjunto de ferramentas destinadas a construir aplicaes sobre essas bases de dados. Essas ferramentas so:
Informix SQL, que inclui um gerador de crans, gestor de menus e gerador de listagens. (Todos estes utilitrios so bastante limitados.)
SQL embebido em linguagens de 3 gerao: Informix ESQL/C, ESQL/COBOL, ESQL/FORTRAN, ESQL/ADA.
Informix 4GL. Uma linguagem prpria da Informix Corporation (ex-RDMS) COM caractersticas de desenvolvimento acelerado de programas (estimado em 10 a 20 vezes mais rpido que as linguagens de 3 gerao). Todos os produtos Informix se caracterizam por aceder s bases de dados atravs de uma linguagem
comum chamada RDSQL (extenso do standard SQL-Structured Query Language). Esta filosofia permite uma maior facilidade na formao de programadores bem como uma separao efectiva entre o nvel fsico e
lgico da explorao da base de dados tal como definido na teoria das bases de dados relacionais.
Na linguagem 4GL juntam-se alguns dos mecanismos das linguagens de terceira gerao, um gestor de crans (FORM'S), um gestor de menus, um gestor de janelas, um gestor de input/output e um gerador de relatrios (REPORT), todos eles interagindo com a base de dados atravs da linguagem RDSQL. tambm possvel aceder a subrotinas escritas em C (ou outra linguagem qual o C tenha acesso) e a recursos do sistema operativo.
A linguagem 4GL apresenta-se em duas verses totalmente compatveis, uma compilada para
programas executveis em cdigo especfico das diferentes mquinas, outra compilada para um cdigo
intermdio independente do S.O.e do computador.
Na verso compilada do 4GL constitudo por um compilador, um conjunto de livrarias e algumas facilidades interactivas para os programadores. O compilador transforma um source de 4GL num source de
ESQL/C, que por sua vez transformado em C compatvel com o compilador de C disponvel na mquina/sistema operativo em que est instalada a base de dados.
Na verso com gerao de p_cdigo (Rapid Development System) o programa de 4GL d origem directamente a um programa "executvel" (sufixo 4go ou 4gi) que ter de ser interpretado por um programa RUN-TIME.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 5 / 103
+---------+
source de 4GL | prog.4gl| +---------+
| ________c4gl | +---------+
source ESQL/C | prog.ec | +---------+
| ________esql | +---------+
source de C | prog.c | +---------+
|_________cpp (Xenix ou Unix) | +---------+
C pr-processado| prog.i | +---------+
|_________cc (Xenix ou Unix) | +----------+
assembler | prog.s | +----------+
|_________masm (no caso de XENIX) | +--------+ +----------+ +---------------+ +-----------+
| *.o | | prog.o | | bib. stand. C | | Llibsql.a | +--------+ +----------+ +---------------+ +-----------+
| objecto | | | | | | ___ln (XENIX)___| | +----------+ | | +------->| a.out |
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 6 / 103
+---------+ +--------+
source de 4GL | prog.4gl| | pf.4gl | +---------+ +--------+
| ______fglpc_______| | | +---------+ +--------+
objecto | prog.4go| | pf.4go | +---------+ +--------+
|________cat________| | | +----------+ | executvel | prog.4gi |
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 7 / 103
2. RDSQL - BREVE REVISO DAS NOES
No inicio da dcada de 70, F.F. Codd desenvolveu, na IBM, uma linguagem estruturada de buscas,
SQL-Structured Query Language. Igualmente com o nome SQL foi desenvolvida pelo ANSI-American National Standards Institute, uma linguagem de manipulao de dados de uma base de dados, isto ,
"Standard SQL". Na figura seguinte podemos observar as instrues do Standard-SQL mais os comandos adicionados
pela Informix Software, Inc.
ALTER INDEX* DROP SYNONYM* START DATABASE* ALTER TABLE* DROP TABLE* UNION BEGIN WORK* DROP VIEW* UNLOCK TABLE* CLOSE DATABASE* EXECUTE* UPDATE COMMIT WORK GRANT UPDATE STATISTICS* CREATE DATABASE* INSERT WHENEVER CREATE INDEX* LOCK TABLE* CREATE SYNONYM* PREPARE* Cursor Manipulation: CREATE TABLE RENAME COLUMN* CLOSE CREATE VIEW RENAME TABLE* DECLARE DATABASE* REVOKE* FETCH DELETE ROLLBACK WORK FLUSH* DROP DATABASE* ROLLFORWARD DATABASE* OPEN DROP INDEX* SELECT PUT*
Figura 3 Instrues do Standard-SQL e as adicionadas pela Informix Software, Inc
Este captulo pretende ser uma pequena reviso dos conceitos de RDSQL adquiridos no curso de Informix-SQL, complementando com alguns comandos novos para que nos possamos iniciar no estudo do Informix-4GL. Podemos observar que a maioria dos comandos da figura anterior esto j documentados no manual de Informix-SQL. Vamos passar a uma breve descrio destes: ALTER INDEX ndice TO [NOT] CLUSTER
Quando uma coluna tem um ndice CLUSTER, isto tem a ordenao fsica da tabela coincidente com a ordenao dos ndices, (temporariamente, isto , enquanto os dados da tabela no forem alterados).Esta instruo serve para alterar o ndice que passa a ser CLUSTER ou deixa de ser CLUSTER.
*Instruces adicionadas pela Informix Software, Inc
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 8 / 103
ALTER TABLE tabela
{ ADD (nova_coluna tipo_nova_coluna
[ BEFORE velha_coluna ][,...])
| DROP (velha_coluna [,...]) | MODIFY (velha_coluna novo_tipo_coluna [NOT NULL][,...]) }[,...]
Esta instruo serve para fazer alteraes estruturais, na tabela tabela.
BEGIN WORK
Serve para iniciar uma transaco.
CLOSE DATABASE
Serve para fechar a base de dados, isto fechar todos os ficheiros da base de dados que
eventualmente estejam abertos. COMMIT WORK
Termina uma transaco com sucesso, ou seja, todas as instrues de insero ou alterao de dados a tabelas entre as instrues BEGIN WORK e COMMIT WORK sero realizadas.
CREATE DATABASE base dados [WITH LOG IN "pathname"] Criar a base de dados com o nome basedados. Quando se cria a base de dados pode-se simultaneamente criar o ficheiro de transaces, onde ficam registados todas a alteraes feitos sobre
a base de dados.
CREATE [UNIQUE |DISTINCT] [CLUSTER] INDEX ndice ON tabela (coluna [ASC/DESC][,...]) Quando se cria um ndice tem de se dizer para que tabela e a que coluna este se refere. Pode-se ainda definir se nico, ou CLUSTER.
CREATE SYNONYM sinonimo FOR tabela
Criar um sinnimo para uma tabela, isto , um nome alternativo. Este sinnimo apenas vlido para
a pessoa que o criou.
CREATE TABLE tabela (coluna tipo [NOT NULL][,...]) [IN "pathname"]
Permite-nos criar uma tabela com as respectivas colunas. Caso no se queira que a tabela fique no
directrio basedados.dbs, pode-se definir para que directrio vai a tabela que est a ser criada com a
opo "IN pathname".
CREATE VIEW view [(lista_de_colunas)] AS SELECT procedimento [WITH CHECK OPTION]
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 9 / 103
Permite-nos criar uma VIEW que tem como contedo o resultado do SELECT. Quando se cria a VIEW com "WITH CHECK OPTION" garante-se que o utilizador da VIEW apenas poder ter
acesso aos dados que resultam da execuo da instruo SELECT.
DATABASE base dados [EXCLUSIVE] A instruo DATABASE serve para activar a base de dados em que se quer trabalhar. Quando se activa a base de dados com a opo "EXCLUSIVE" temos a garantia de que mais ningum lhe pode
mexer.
DELETE FROM tabela [WHERE condio] Para apagar linhas de dados de uma tabela; caso haja condio os dados apagados so os que obedecem a esta.
DROP DATABASE base dados
Apaga todas as tabelas que constituem a base de dados e remove o directrio da base de dados a no
ser que neste directrio existam outros ficheiros que no pertenam a esta base de dados.
DROP INDEX ndice
DROP SYNONYM sinonimo
DROP TABLE tabela
DROP VIEW view
Estas instrues apagam respectivamente ndice, sinnimo, tabela e view.
GRANT {lista_previlgios_tabela ON tabela | privilgios base_dados} TO {PUBLIC | lista_utilizadores} [WITH GRANT OPTION] Serve para dar permisses de acesso dos utilizadores s tabelas de base de dados. Quando se pe a opo "WITH GRANT OPTION" isto quer dizer que os utilizadores para quem se est a fazer
GRANT podem fazer o mesmo para outros utilizadores.
INSERT INTO Tabela [(lista_colunas)] {VALUES (lista_de_valores) | SELECT procedimentos}
Permite inserir dados numa tabela; estes dados podem-se inserir directamente ou serem o resultado
de um SELECT.
LOCK TABLE tabela IN {SHARE |EXCLUSIVE} MODE Esta instruo serve para vedar o acesso dos utilizadores enquanto se procede a uma determinada tarefa. O
acesso pode ser totalmente vedado se se fizer o LOCK com a opo "EXCLUSIVE"; ou
parcialmente vedado no caso de se usar a opo "SHARE" em que outros utilizadores podem fazer
consultas tabela em questo.
RENAME COLUMN tabela.velha_coluna TO nova_coluna
Permite mudar o nome de uma coluna de uma tabela.
RENAME TABLE nome_velho_tabela TO nome_novo_tabela
Permite alterar o nome de uma tabela.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 10 / 103
REVOKE { lista_previlgios_tabela ON tabela | previlgios_base_dados } FROM {PUBLIC | lista_utilizadores } Retira autorizaes a utilizadores.
ROLLBACK WORK
Termina uma transaco com insucesso; todas as instrues de INSERT, UPDATE tabela, entre
as instrues BEGIN WORK e ROLLBACK WORK no se concretizam.
ROLLFORWARD DATABASE base_dados
Recuperao de dados de uma base de dados (quando esta tem problemas) a partir do ficheiro de transaces.
SELECT [ALL | DISTINCT | UNIQUE} lista_seleccionada [INTO lista de variveis] FROM {tabela [alias_tabela]} | OUTER tabela [alias_tabela] [WHERE condio] [GROUP BY lista colunas] [HAVING condio] [ORDER BY coluna [ASC | DESC][,...]] [INTO TEMP tabela_tempo] Esta instruo permite seleccionar linhas de uma ou mais tabelas; agrupadas ou no; ordenadas ou
no; obedecendo ou no a um conjunto de condies. START DATABASE basedados WITH LOG IN "pathname"
Inicializao de uma base de dados criando o ficheiro de transaco. Este procedimento tem de ser
precedido da instruo "CLOSE DATABASE" no caso de se ter criado inicialmente a base de dados
sem o ficheiro de transaco.
UNION
Serve para combinar duas ou mais instrues SELECT por forma a constituir uma nica instruo
SELECT.
SELECT procedimento UNION [ALL] SELECT procedimento [...] UNLOCK TABLE tabela
Serve para destrancar o acesso a uma tabela que tinha sido vedado pela instruo "LOCK TABLE".
UPDATE tabela
SET { coluna = expresso [,...] | {(lista_coluna) | tabela.* | * } = {(lista_expresso) | record.*}} [WHERE condio] Permite alterar os dados de uma tabela, obedecendo ou no a uma determinada condio.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 11 / 103
UPDATE STATISTICS [FOR TABLE tabela] Quando se faz a insero de dados numa tabela com a instruo "LOAD", necessrio correr esta instruo para se obter informao sobre o estado da tabela actualizado, isto , proceder
actualizao da tabela do dicionrio da base de dados.
As instrues que aparecem na figura anterior mas que no foram aqui referidas iro ser explicadas
no captulo " Interao do Informix 4GL com as bases de dados".
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 12 / 103
3. ESTRUTURA DE UM PROGRAMA
Um programa constituido por funes e declaraes. A primeira funo a ser executada a funo
"MAIN", e, tem de existir em todos os programas.
As vrias funes podem estar distribuidas por vrios ficheiros a que se convencionou chamar
mdulos.
% cat hello.4gl
MAIN DISPLAY "hello world" END MAIN
% c4gl -o hello.4ge hello.4gl % hello.4ge hello world %
Figura 3 O mais pequeno programa de 4GL
3.1. FLUXO DO PROGRAMA
Tal como nas linguagens de terceira gerao um programa executado de acordo com instrues de
controlo de fluxo, em todas as funes excepto nos reports (os reports possuiem uma estrutura declarativa). Para controlar o fluxo do programa foram implementadas diversas instrues de controlo de fluxo das
linguagens tradicionais (while, if, case, etc.), e, algumas com instrues especificas desta linguagem (Menus, prompts, etc.), algumas das quais no procedimentais (ex: MENU, INPUT etc.).
% cat here.4gl MAIN DISPLAY "hello world" DISPLAY "here i am" END MAIN
% c4gl -o here.4ge here.4gl % here.4ge hello world here i am %
Figura 4 Fluxo do programa
A frase "here i am" apareceu depois da frase "hello world" porque a 2 instruo DISPLAY foi
executada depois da primeira, e exprime o facto de a linguagem ser de estrutura procedimental (ou sequencial).
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 13 / 103
O 4GL ao mesmo tempo declarativo e procedimental. Como exemplo de declarativo temos os
reports e as instrues de entrada/saida formatada, e, como exemplo de procedimental a estrutura geral das
funes.
% cat hellorep.4gl MAIN START REPORT hello OUTPUT TO REPORT hello() FINISH REPORT hello END MAIN
REPORT hello() FORMAT PAGE TRAILER PRINT "here i am" PAGE HEADER PRINT "hello world" END REPORT
% c4gl hellorep.4gl
Figura 5 Fluxo num report
Quando este programa for compilado e executado a frase "here i am" aparecer primeiro do que "hello world", pelo simples facto de que foi declarado ao programa que no inicio de pgina dever aparecer
"here i am" e no fim da pgina dever aparecer "hello world". Este facto exprime a estrutura declarativa (no procedimental) dos REPORT(s) do 4GL.
3.2. TIPOS E CONVERSES DE TIPOS
Como linguagem de gesto de base de dados, o 4GL reconhece as estruturas representveis na base
de dados, e, algumas de maior complexidade. Os tipos de dados complexos, so declarados por composio
de tipos elementares. Em 4GL os tipos de dados elementares existentes so:
SMALLINT Numeros inteiros pequenos, uma varivel deste tipo pode receber numeros inteiros entre -32767
e 37767.
INTEGER Numeros inteiros entre aproximadamente -2 milhares de milhes e 2 milhares de milhes.
DECIMAL[(m,[,n])] Numeros decimais com m algarismos na parte inteira e n casas decimais (mximo 16 algarismos).
SMALLFLOAT Numero com virgula flutuante, representado em duas partes: uma mantissa entre 0 e 1, e um
expoente.
FLOAT Numero com virgula flutuante de dupla preciso.Ocupa o dobro da memria de um SMALLFLOAT
e permiite representar numeros maiores e com maior preciso.
MONEY[(m[,n])] Com tratamento especial na edio com vista a representar quantidades numerrias. CHAR(n) Alfanumrico de comprimento n.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 14 / 103
DATE Tipo equivalente a uma data, configurvel atravs da varivel de ambiente DBDATE. Internamente,
este tipo armazenado como inteiro, no formato juliano (n de dias desde 31 de dezembro de 1899). Existem ainda dois tipos, compostos dos acima descritos
ARRAY tipo Representa uma varivel composta por vrios elementos do mesmo tipo.
RECORD Representa uma varivel composta por diferentes variveis de tipos diferentes. 'E possivel
representar ARRAY(s) de RECORD(s), mas no se pode ter um ARRAY como elemento de um RECORD.
3.3. VARIVEIS Uma linguagem, deve possuir sempre alguma forma de armazenar em memria informao
intermdia necessria execuo dos programas. Tal como nas linguagens de terceira gerao, no 4GL
existem variveis.
Uma varivel pode ser de qualquer dos tipos definidos anteriormente.
A declarao de variveis sempre efectuada depois da palavra chave "DEFINE". Uma varivel
declara-se da seguinte forma:
DEFINE nome_da_variavel TIPO
ou
DEFINE nome_da_variavel LIKE tabela.coluna
No segundo caso cria-se uma nova varivel cuja estrutura condiz com a estrutura de uma coluna de uma tabela da base de dados. Sempre que uma varivel for declarada usando a instruo LIKE, deve existir no
inicio do mdulo uma instruo DATABASE que indica qual a base de dados a ser usada para obter as
colunas com vista declarao por equivalncia.
Se a varivel for um record deve-se apenas declarar da seguinte forma:
nome_do_record RECORD lista_de_variaveis END RECORD
ou
nome_do_record RECORD LIKE tabela.* END RECORD
No segundo caso criada uma estrutura com elementos identicos a todas as colunas de uma tabela da
base de dados corrente.
Um elemento de uma varivel tipo RECORD acede-se atravs do operador ".", assim pr_x.c1
representa o elemento c1 do record pr_x. A notao ".*" pode ser usada em alguns contextos para indicar
todos os elementos de um RECORD, ex: pr_x.* indica todos os elementos do RECORD pr_x.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 15 / 103
Se a varivel for um array deve ser declarada da seguinte forma:
nome_da_variavel ARRAY[m,n,...] OF tipo
Figura 6 Definio genrica de um declarao de array
Os elementos das variveis tipo ARRAY acedem-se atravs do operador [] e d indicao do numero do elemento a que se quer aceder, ex: pa_x[10] indica o 10 elemento do ARRAY pa_x.
As variveis podem ser locais a uma funo ou globais a um mdulo ou programa
3.3.1. VARIVEIS LOCAIS
DEFINE lista_de_variveis tipo [, ...]
Figura 7 Definio genrica de uma varivel local
As variveis locais tm que ser declaradas no inicio de cada funo, e, s so conhecidas dentro da
funo em que foram declaradas.
% cat localvars.4gl
DATABASE livros
MAIN DEFINE x INTEGER, pr_livros RECORD LIKE livros.*
LET x = 1 SELECT livros.* INTO pr_livros.* FROM livros WHERE numero = x
DISPLAY pr_livros.nome
END MAIN
% c4gl localvars.4gl % a.out Artificial Inteligence using C
%
Figura 8 Programa com variveis locais
Se declarar duas variveis com o mesmo nome em duas funes distintas, cada varivel s vai ser
conhecida na funo de declarao. Efectivamente as variveis com o mesmo nome, locais a funes
diferentes so variveis diferentes.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 16 / 103
3.3.2. VARIVEIS GLOBAIS
GLOBALS {"nome_de_ficheiro"| instrucao DEFINE END GLOBALS}
Figura 9 Definio genrica de uma declarao global
Como se pode ver acima, a instruo GLOBALS tem duas formas possiveis.Na primeira indica-se o
nome de um ficheiro que contm um conjunto de instrues DEFINE e uma instruo DATABASE.A vantagem deste sistema o conhecimento das variveis globais em todos os mdulos sem necessidade de
declar-las em cada um deles.
Na outra forma, a instruo GLOBALS constituida por uma instruo define.
% cat globalvars.4gl
DATABASE livros GLOBALS DEFINE x INTEGER, pr_livros RECORD LIKE livros.* END GLOBALS
MAIN
LET x = 1 SELECT livros.* INTO pr_livros.* FROM livros WHERE numero = x
DISPLAY pr_livros.nome
END MAIN
% c4gl globalvars.4gl % a.out Artificial Inteligence using C %
Figura 9 Programa com variveis globais
No programa dado como exemplo no havia grande necessidade de declarar as variveis como
globais. medida que fr programando vai sentindo as necessidades deste tipo de variveis.
3.3.3. AFECTAES, COMPARAES E INICIALIZAES.
Uma das operaes bsicas a efectuar sobre variveis a afectao.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 17 / 103
No 4gl para afectar uma varivel com uma constante, expresso ou conteudo de outra varivel
utiliza-se o seguinte formato:
LET varivel = { expresso | varivel | constante }
Figura 10 Definio genrica da afectao
No 4gl, ao contrrio de outras linguagens (C por exemplo), pode-se afectar uma varivel de qualquer tipo bsico. As variveis compostas s podem ser afectadas atravs dos seus elementos constituintes.
% cat afecta.4gl
DATABASE livros
MAIN DEFINE x INTEGER, y CHAR(20), z FLOAT, pr_livros RECORD LIKE livros.*, pr_livros2 RECORD LIKE livros.*
LET x = 69 LET y = "Uma string" LET z = 120.596
DISPLAY "X tem ", x,", Y tem ", y,"e Z = ",z
SELECT * INTO pr_livros.* FROM livros WHERE @numero = 1
LET pr_livros2.* = pr_livros.* DISPLAY pr_livros2.numero, pr_livros.nome
END MAIN % c4gl afecta.4gl % a.out X tem 69, Y tem Uma string e Z = 120.60 1Artificial Inteligence Using C %
Figura 11 Afectaes de variveis
Conforme se viu afectaram-se variveis de diversos tipos elementares e compostos. Nos tipos
compostos o nmero e tamanho das variveis elementares que dele fazem parte t^em de ser iguais.
Nesta linguagem, no h diferena entre o operador "=" usado na afectao e na comparao. Este
facto deve-se a que a identificao destas operaes efectuada por intermdio do contexto em que as
instrues esto inseridas.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 18 / 103
Quando se afecta uma varivel com uma expresso, esta automticamente convertida para o tipo da varivel, se a converso resulta em erro, o programa notifica com erro de execuo. Por exemplo na
instruo LET i="10" se a varivel i for um inteiro, a expresso "10" automticamente convertida a inteiro.
As comparaes so todas feitas por intermdio do sinal de igual mesmo que sejam comparaes de strings.
% cat comp.4gl MAIN DEFINE y CHAR(20)
LET y = "Uma string"
IF y > "UMA STRING" THEN DISPLAY "Uma string maior que UMA STRING" END IF IF y < "uma string" THEN DISPLAY "Uma string menor que UMA STRING" END IF IF y = "Uma string" THEN DISPLAY "Uma string igual a UMA STRING" END IF END MAIN % c4gl comp.4gl % a.out Uma string maior que UMA STRING Uma string menor que UMA STRING Uma string igual a UMA STRING %
Figura 12 Vrios exemplos de comparaes
Os operadores de comparao, no 4GL so:
> maior que < menor que >= maior ou igual que
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 19 / 103
INITIALIZE lista_de_variaveis {LIKE lista_de_colunas | TO NULL}
Figura 14 Definio genrica da instruo INITIALIZE
Se utilizar a clusula LIKE lista_de_colunas, a instruo inicializa as variveis com os valores
correspondentes a cada coluna e que esto registadas na tabela syscolval (ver utilitrio upscol), ou seja as variveis ficam com os valores de default definidos com o utilitrio upscol.
Se evocar a funo com o par^ametro TO NULL, as variveis dadas ficam inicializadas a NULL.
3.3.4.CONCATENAO DE VARIVEIS CHAR E O OPERADOR,
No 4GL muito simples concatenar strings, basta separ-las por uma virgula (o operador de concatenao de strings a virgula).
% cat concat.4gl MAIN DEFINE x CHAR(20), y CHAR(50)
LET x = "String 1 " LET y = "Concatenou ",x CLIPPED," com outras duas strings" DISPLAY y END MAIN % c4gl concat.4gl % a.out Concatenou String 1 com outras duas strings %
Figura 13 Exemplo de concatenao de strings
3.4. FUNES
Uma funo um conjunto de instrues que so executadas conjuntamente e que pode receber um conjunto de par^ametros e devolver valores.
O 4GL apesar de ser uma linguagem de 4 gerao possui esta capacidade das linguagens
estruturadas.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 20 / 103
FUNCTION nome_da_funcao([arg1,arg2,...,argn]) instruo ...
[RETURN lista_expresses] ...
END FUNCTION
Figura 15 Definio genrica de uma funo
Uma funo identificada por um nome, comea com a palavra chave FUNCTION e termina com as
palavras chave END FUNCTION, excepto a funo MAIN que no tem nome e delimitada por
MAIN...END MAIN.
% cat hellofunc.4gl MAIN CALL hello() END MAIN
FUNCTION hello() DISPLAY "hello world" END FUNCTION
% c4gl -o hellofunc.4ge hellofunc.4gl % hellofunc.4ge hello world %
Figura 15 Uma funo muito simples
Uma funo, para alm de poder possuir variveis locais, pode ainda ter variveis de entrada
(parmetros), e, ter associada valores a devolver funo que a evocou (valores de retorno). Tanto os par^ametros como os valores de retorno podem ser de qualquer tipo permitido pelo 4gl.A chamada funo
faz-se com a instruo CALL e para definir em que variveis vm os valores devolvidos usa-se a clusula
RETURNING com uma lista de variveis a devolver.
CALL funo([argumentos]) [RETURNING lista_de_variveis]
Figura 16 Definio genrica da instruo CALL
Se uma funo devolver apenas um valor pode-se chamar com a instruo LET.
LET variavel = funo([argumentos])
Figura 17 Chamar uma funo com instruo LET
Os parmetros de uma funo so sempre declarados. Esta declarao faz com que a linguagem
verifique todas as chamadas s funes e no caso de estas no serem executadas com o mesmo nmero de
parmetros que a declarao da funo resulta um erro de compilao do programa.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 21 / 103
% cat max.4gl MAIN DEFINE maxval INTEGER LET maxval = maximo(4,8,5) DISPLAY "O maior numero e: ",maxval END MAIN
FUNCTION maximo(n1,n2,n3) DEFINE n1 INTEGER, n2 INTEGER, n3 INTEGER IF n1 > n2 THEN LET n2 = n1 END IF IF n2 > n3 THEN RETURN n2 END IF RETURN n3 END FUNCTION % c4gl max.4gl % a.out O maior numero e: 8 %
Figura 18 Funo com vrios tipos de par^ametros de entrada
Para retornar determinado valor usa-se a palavra chave RETURN.
Ao contrrio de algumas linguagens de terceira gerao (p/ex. o C), uma funo de 4GL no necessita de ser declarada como de determinado tipo, ou seja: se pretender que a funo devolva o nmero inteiro 10, s ter que fazer:
% cat retfunc1.4gl
MAIN DEFINE x INTEGER LET x = FUNC() DISPLAY "X tem",x END MAIN
FUNCTION FUNC() RETURN(10) END FUNCTION
% c4gl retfunc1.4gl % a.out X tem 10 %
Figura 19 Funo que retorna um nmero inteiro
Se pretender devolver uma string poder fazer:
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 22 / 103
% cat retfunc2.4gl
MAIN DEFINE x CHAR(100) LET x = FUNC() DISPLAY x END MAIN
FUNCTION FUNC() RETURN("Esta string vai ser devolvida") END FUNCTION
% c4gl retfunc2.4gl % a.out Esta string vai ser devolvida %
Figura 20 Funo que retorna uma string
H que ter cuidado para que a varivel com que se afecta a funo seja do mesmo tipo do valor (ou varivel) que se devolveu dentro da funo.
% cat retfunc3.4gl
MAIN DEFINE x INTEGER y CHAR(100)
CALL FUNC() RETURNING(x,y) DISPLAY x DISPLAY y END MAIN
FUNCTION FUNC() RETURN(100,"Esta string vai ser devolvida") END FUNCTION
% c4gl retfunc3.4gl % a.out 100 Esta string vai ser devolvida %
Figura 21 Funo com devoluo de vrios valores
3.5. MDULOS
Para um programa muito complexo torna-se dificil a coexistencia de todas as funes num unico
ficheiro, pois a legibilidade fica grandemente afectada ( dificil ler um ficheiro muito grande).
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 23 / 103
Determinadas tarefas podem ter de ser executadas vrias vezes, em programas diferentes, como por
exemplo a validao de um digito de controle (check digit), do nmero de contribuinte, que igual ao do B.I. Seria bom se fosse possivel reutilizar uma funo em vrios programas.
A um programa separado em mdulos facilita muito a tarefa de manuteno, pois em caso de
alterao apenas necessrio recompilar os mdulos que sofreram alteraes.
A linguagem 4GL permite a diviso de um programa em mdulos, que so compilados
separadamente e ligados (link) em seguida. Em cada mdulo existem declaraes globais e funes. Num programa constituido por vrios
mdulos, s deve existir a funo MAIN num deles, e um nome de funo s deve existir uma vez em todos
os mdulos.
% cat mod1.4gl MAIN CALL hello() END MAIN % cat mod2.4gl FUNCTION hello() DISPLAY "Hello world" END FUNCTION % c4gl mod1.4gl mod2.4gl % a.out Hello world %
Figura 22 Programa dividido em dois mdulos separados
No exemplo anterior compilaram-se os dois mdulos simultneamente, no entanto poder-se-ia
compilar cada um deles com a opcao -c para gerar um objecto (.o), e no final ligar (linkar) os dois [*]. Procedendo desta forma voc pode compilar apenas o mdulo que alterou e linkar com o objecto j existente. Se estiver a trabalhar em RDS o processo de ligao de dois mdulos feito concatenando-os com o comando cat (no UNIX).
Quando se trabalha com muitos mdulos conveniente utilizar um programa gestor de compilaes (make do unix ou o "program compile" do 4gl), pois a tarefa de construo do programa pode complicar-se de tal modo que se perde o controle sobre as alteraes j feitas e os passos necessrios reconstruo do programa.
3.6. CONVERSES DE TIPOS
Como j foi dito quando se falou de afectaes, as expresses no 4GL so sempre convertidas para o tipo necessrio ao contexto onde esto incluidas, no existem por isso operadores de converso de tipo como
noutras linguagens, a nica excepo o operador DATE(...) que converte uma expresso para um tipo
*Usando o comando ld (link), no caso da verso C do 4GL
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 24 / 103
DATE. Esta situao torna por vezes problemtica a converso de tipos, podendo no entanto tornear-se o
problema declarando uma varivel do tipo para o qual se quer converter a expresso e afectando a varivel
com a expresso.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 25 / 103
4. CONTROLO DE SEQUNCIA
A construo de um programa implica a tomada de decises, a repetio de instrues
parmetrizadas, etc. No 4GL encontram-se alguns dos mecanismos de controlo e repetio existentes nas
linguagens de terceira gerao.
4.1. IF...THEN...ELSE...END IF
Esta instruo existe na quase generalidade das linguagens. A deciso efectuada partir de uma
expresso booleana.
Em portugus esta instruo poderia ser explicada por:
Se esta expresso verdadeira Ento faz isto Seno faz aquilo
Em que "faz isto" e "faz aquilo" seria um conjunto de instrues a executar em cada um dos casos.
IF expresso_booleana THEN instruo [ ELSE instruo END IF
Figura 23 Definio geral da instruo IF...THEN...ELSE
Uma expresso booleana pode por exemplo, ser um conjunto de comparaes entre expresses, sendo possivel efectuar operaes booleanas entre expresses, nomeadamente:
AND A expresso verdadeira se e s se as duas sub-expresses o forem.
IF a = "casado" AND b = "solteiro" THEN CALL casa_com(a,b) END IF
Figura 24 Utilizao de AND numa expresso
OR A expresso verdadeira se alguma das sub-expresses o fr.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 26 / 103
IF cao = "morde" OR cao = "grande" THEN CALL correr_mais_depressa() END IF
Figura 25 Utilizao de OR numa expresso
NOT A expresso verdadeira se a sub-expresso no fr.
IF NOT ha_cerveja THEN CALL bebe_vinho() END IF
Figura 26 Utilizao de NOT numa expresso
4.2. WHILE
Esta instruo de repetio pode ser explicada por:
Enquanto esta_expresso_for_verdadeira faz_isto
Faz_isto um conjunto de instrues a serem executadas se a expresso booleana for verdadeira.
WHILE expressao_booleana { instruo | EXIT WHILE | CONTINUE WHILE } END WHILE
Figura 27 Definio genrica da instruo WHILE
Uma expresso booleana usada no while identica usada no IF e a qualquer uma que se utilize
num programa.
WHILE esta != "bebado" CALL bebe_mais_cerveja() END WHILE
Figura 28 Ciclo WHILE
Existem duas instrues que podem ser usadas dentro de um WHILE:
"EXIT WHILE" e "CONTINUE WHILE".
EXIT WHILE, serve para abandonar o ciclo independentemente da expresso booleana do WHILE.
CONTINUE WHILE, quando evocada, provoca um reposicionamento no inicio do ciclo (com o correspondente teste guarda do ciclo) sem cumprir as instrues que se encontravam abaixo.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 27 / 103
4.3. FOR
Por vezes necessrio cumprir um ciclo um determinado nmero de vezes incrementando uma
varivel com um valor.
FOR variavel_inteira = expresso1 TO expressao2 [ STEP expresso3 ] { instruo | CONTINUE FOR | EXIT FOR } END FOR
Figura 28 Definio genrica do ciclo FOR
A instruo acima definida inicializa a variavel_inteira com o resultado da expresso1 e cumpre as
instrues at que a expresso2 seja falsa, incrementando a varivel_inteira com o resultado de expresso3. Se o programador, por alguma razo desejar sair do ciclo, pode utilizar a instruo "EXIT FOR". Se, por outro lado j no pretender executar as instrues abaixo pode utilizar a instruo "CONTINUE FOR". Estas duas ultimas instrues so em tudo anlogas s existentes no ciclo WHILE, incidindo no entanto sobre o "FOR".
4.4. CASE
Por vezes necessrio efectuar uma deciso multipla, isso pode fazer-se com recurso a vrias
instrues IF encaixadas, a instruo CASE surge como uma forma mais simples de resolver esta questo.
CASE [(expresso)] WHEN {expresso | expresso booleana} instruo ...
[EXIT CASE] ....
[OTHERWISE] instruo ...
[EXIT CASE] ...
END CASE
Figura 29 Definio genrica da instruo CASE
A instruo CASE pode ser utilizada de duas formas diversas:
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 28 / 103
4.4.1. SELEO EFECTUADA POR EXPRESSES
CASE (expr) WHEN valor instruo ...
OTHERWISE instruo ...
END CASE
Figura 30 Forma geral de CASE com seleo por expresses
A expresso comparada com os vrios valores sendo executadas as instrues associadas ao
primeiro valor igual ao resultado da expresso.Se todos os valores forem diferentes do resultado da expresso,
so executadas as expresses associadas clusula OTHERWISE (se esta existir).
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 29 / 103
% cat case1.4gl DATABASE livros
MAIN DEFINE x LIKE livros.numero, ans CHAR(1), nome LIKE livros.nome
LET ans = "s" WHILE 1 PROMPT "Qual o numero do livro que pretende procurar: " FOR x
SELECT livros.nome INTO nome FROM livros WHERE numero = x
DISPLAY nome
PROMPT "Quer escolher mais livros (S/N) " FOR CHAR ans CASE (ans) WHEN "s" EXIT CASE WHEN "n" EXIT WHILE OTHERWISE DISPLAY "OPCAO INVALIDA" EXIT WHILE END CASE END WHILE END MAIN % c4gl case1.4gl % a.out Qual o numero do livro que pretende procurar: 34 Unix system programing Quer escolher mais livros (S/N) g OPCAO INVALIDA %
Figura 31 Utilizao do CASE utilizando expresses para fazer a seleo
Na execuo deste programa, quando se perguntou ao utilizador se desejava procurar mais livros, ele respondeu quando as opes eram ou , pelo que o programa entrou no OTHERWISE do case.
Neste caso a seleo do caso pretendido efectuada quando o resultado da expresso existente junto da palavra chave CASE identico ao resultado de uma expresso junto a uma das palavras chave WHEN. De notar que, se existirem duas expresses que tenham como resultado igual valor, executada a que aparece em
1 lugar.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 30 / 103
4.4.2. SELEO EFECTUADA POR EXPRESSO BOOLEANA
A instruo CASE com expresses booleanas toma a seguinte forma:
CASE WHEN expresso_booleana1 instruo ...
WHEN expresso_booleana2 instruo .
OTHERWISE instruo ...
END CASE
Figura 31 Instruo CASE com seleo por expresso booleana
As expresses booleanas so avaliadas na ordem em que aparecem e executado o grupo de
instrues associado primeira expresso booleana verdadeira. Se todas as expresses forem falsas so
executadas as instrues associadas clusula OTHERWISE.
Em qualquer das formas da instruo CASE pode-se incluir no bloco de instrues uma instruo
EXIT CASE que provoca a interrupo do CASE neste ponto.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 31 / 103
5. A BIBLIOTECA 4GL
Este captulo descreve as funes que esto disponveis na biblioteca do INFORMIX-4GL. Qualquer das funes apresentadas de seguida podem ser chamdas num programa, que o compilador do INFORMIX-
4GL automticamente as linka ao programa.
Passamos de seguida descrio das funes da biblioteca:
ARG_VAL(expresso) Esta funo recebe como argumento uma varivel tipo INTEGER, devolve o argumento
correspondente a esse nmero que lhe foi passado pela linha de comando.
A funo ARG_VAL(n) devolve o n-simo argumento da linha de comando,do tipo CHAR. O valor da expressotem de estar entre 0 e NUM_ARGS() do nmero de argumentos passados pela linha de comando. ARG_VAL(0) corresponde ao nome do programa.
As funes ARG_VAL e NUM_ARGS permitem passar dados ao programa a partir da linha de
comando quando este executado.
Suponhamos que o nosso programa de 4GL compilado se chama teste.4ge, ao execut-lo da linha de
comando fazemos
teste.4ge maria pedro catarina
Figura 32Execuo de um programa de 4GL, com argumentos
O programa que se segue um exemplo, recebe os nomes num ARRAY de variaveis do tipo CHAR
ARR_COUNT() Esta funo devolve o nmero de linhas introduzidas num array de um programa durante ou aps a
instruo INPUT ARRAY.
Quando se executa uma instruo com a clusula BEFORE, AFTER ou ON KEY, o valor de ARR_CURR, SCR_LINE ou ARR_COUNT, alterado, e o valor resulta da execuo das clusulas.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 32 / 103
FUNCTION inserir_livros() DEFINE contador SMALLINT
FOR contador = 1 TO arr_count() INSERT INTO livros VALUES (p_livros[contador].liv_num, p_livros.[contador].liv_nome, p_livros.[contador].liv_editor, p_livros.[contador].livno) END FOR
END FUNCTION
Figura 33 Exemplo de utilizao da funo ARR_COUNT
ARR_CURR() Esta funo devolve a linha do array do programa que corresponde linha do array corrente do cran
durante o imediatamente aps a instruo INPUT ARRAY ou DISPLAY ARRAY.
A linha corrente do array do cran corresponde linha onde est localizado o cursor no inicio de
uma clusula BEFORE ROW or AFTER ROW.
A primeira linha tanto do array do programa ou do cran numerada com 1.
INPUT ARRAY p_livros TO s_livros.* ON KEY(F6) DISPLAY ARRAY p_estante TO p_estante.* END DISPLAY LET pa_curr = ARR_CURR() MESSAGE "O valor corrente de ARR_CURR : ", pa_curr
END INPUT
Figura 34 Exemplo da utilizao da funo ARR_CURR
DOWNSHFIT(frase) Esta funo devolve uma string em que todos os caracteres que lhe tenham sido passados em
maiusculas so convertidos em minusculas.
Se o caracteres passados funo como argumentos forem numricos, este no sero alterados.
A funo DOWNSHIFT pode ser usada numa expresso ou para afectar uma varivel com o valor
devolvido pela funo.
LET d_str = DOWNSHIFT(str)
DISPLAY d_str
Figura 35 Exemplo de utilizao da funo DOWNSHIFT
UPSHFIT(frase)
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 33 / 103
Esta funo devolve uma string em que todos os caracteres que lhe tenham sido passados em
minusculas so convertidos em maisculas.
Se o caracteres passados funo como argumentos forem numricos, este no sero alterados.
A funo UPSHIFT pode ser usada numa expresso ou para afectar uma varivel com o valor
devolvido pela funo.
LET d_str = UPSHIFT(str)
DISPLAY d_str
Figura 36 Exemplo de utilizao da funo UPSHIFT
ERR_GET(expresso) Esta funo devolve uma varivel do tipo CHAR que contm a mensagem de erro, correspondente
ao cdigo enviado como argumento.
Geralmente a expresso a varivel global STATUS.
A utilizao desta funo muito importante durante as operaes de debug.
IF STATUS < 0 THEN LET errtext = ERR_GET(STATUS) END IF
ERR_PRINT(expresso) Esta funo escreve a mensagem de erro do INFORMIX-4GL, correspondente ao seu argumento, na
ERROR LINE (linha de erro). Mais uma vez, em geral a expresso a varivel global STATUS.
A utilizao desta funo muito importante durante as operaes de debug.
IF STATUS < 0 THEN CALL ERR_PRINT(STATUS) END IF
Figura 37 Exemplo de utilizao da funo ERR_PRINT
ERR_QUIT(expresso) Esta funo escreve a mensagem de erro do INFORMIX-4GL, correspondente ao seu argumento, na
ERROR LINE (linha de erro) e termina a execuo do programa.
CALL ERR_QUIT(expresso)
Figura 38 Formato da funo ERR_QUIT Geralmente a expresso a varivel global STATUS.
A utilizao desta funo muito importante durante as operaes
de debug.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 34 / 103
IF STATUS < 0 THEN CALL ERR_QUIT(STATUS) END IF
Figura 39 Exemplo da utilizao da funo ERR_QUIT
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 35 / 103
6. I/O BSICO
6.1. PROMPTS
Em 4GL, uma das formas do programa comunicar com o utilizador, por intermdio da instruo
PROMPT. Esta instruo envia uma mensagem para o cran, e, recebe um caracter ou sequencia de caracteres
que foram digitados pelo utilizador no seu terminal.
A definio genrica de uma instruo PROMPT a seguinte:
PROMPT mensagem FOR [CHAR] varivel [HELP numero_do_help] [ON KEY (tecla) instruo ...
...
END PROMPT]
Figura 40 Definio genrica da instruo PROMPT
As mensagens assinaladas so um conjunto de uma ou mais variveis, ou string(s) constantes, separados por virgulas.
Se a instruo for evocada com a palavra chave CHAR, o programa no espera pelo ,
o que equivale a dizer que aceita o caracter e sai da instruo prompt assim que premida uma tecla.
Mais tarde sero focadas outras capacidades desta instruo.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 36 / 103
% cat prompt.4gl
DATABASE livros
MAIN DEFINE x LIKE livros.numero, ans CHAR(1), nome LIKE livros.nome
LET ans = "s" WHILE ( ans = "s" OR ans = "S" ) PROMPT "Qual o numero do livro que pretende procurar: " FOR x
SELECT livros.nome INTO nome FROM livros WHERE numero = x
DISPLAY nome
PROMPT "Quer escolher mais livros (S/N) " FOR CHAR ans END WHILE END MAIN % c4gl prompt.4gl % a.out Qual o numero do livro que pretende procurar: 15 Microsoft C compiler Quer escolher mais livros (S/N) n %
Figura 41 Utilizao da instruo PROMPT
O programa proposto quando executado pede ao utilizador que digite o nmero do livro do qual
pretende saber o nome, faz uma busca na base de dados para descobrir o nome, e, pergunta se o utilizador
pretende ou no continuar a executar essa tarefa.
No programa, quando executada a primeira instruo PROMPT,como no existe a palavra CHAR,
permitido digitar vrios digitos, e terminar com . Na segunda instruo PROMPT, tal j no se passa, pois assim que foi premida a tecla o programa continuou a sua execuo.
6.2. MENUS
Uma forma tipica de perguntar ao utilizador que tarefa pretende executar de um conjunto de n a utilizao de menus.
No 4GL bastante fcil construir menus horizontais. Nestes menus cada opo identificada por
uma pequena palavra e uma linha de explicao. Uma opo encontra-se sempre destacada sendo selecionada
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 37 / 103
premindo a tecla pode mudar-se a opo selecionada com a barra de espaos, as setas ou a
primeira letra da opo desejada. Podem tambm criar-se opes invisiveis. Se as opes no couberem todas no menu, este prolongado com "..." significando que se pode aceder a outras opes que no so visiveis.
Para construir um menu usa-se a instruo MENU cuja definio genrica :
MENU "nome_do_menu" COMMAND {KEY(lista_de_teclas) | [KEY(lista_de_teclas) "opcao" ["linha_de_help"] [HELP numero] instrucao ...
[CONTINUE MENU] ...
[EXIT MENU] ...
[NEXT OPTION "opcao"] ...
END MENU
Figura 42 Definio genrica de uma instruo MENU
As clusulas CONTINUE MENU, NEXT OPTION, e EXIT MENU podem ser colocadas dentro de
outras instrues desde que estejam dentro de uma instruo MENU. Estas clusulas permitem uma grande optimizao do comportamento do menu para o utilizador pois pode haver posicionamento na opo que
lgicamente deveria ser escolhida.
Se for utilizada a clusula de HELP, quando pressiona a tecla de help, o programa chama a funo
show_help e envia o help com o nmero pretendido para o cran.
A clusula KEY optima para definir opes escondidas, e/ou assignar uma nova tecla de escolha
rpida a uma opo.
6.3. DISPLAY AT
Se se pretender enviar pequenas mensagens ao utilizador utiliza-se, no 4gl a instruo DISPLAY
AT.
DISPLAY lista_de_variaveis [AT linha_do_ecranoluna_do_ecran] [ATTRIBUTE (lista_detributos)]
Figura 42 Definio da instruo DISPLAY AT
lista_de_variaveis
um conjunto de uma ou mais variveis do programa ou string(s) constantes separadas por virgulas. linha_do_ecran e coluna_do_ecran
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 38 / 103
So as coordenadas no cran do local onde vai aparecer a mensagem pretendida
lista de atributos
um conjunto de atributos possiveis a utilizar quando se enviar a mensagem para o cran. Os atributos possiveis so:
WHITE YELLOW MAGENTA RED CYAN GREEN BLUE BLACK REVERSE BLINK UNDERLINE NORMAL BOLD DIM INVISIBLE
Figura 44 Atributos do cran possiveis
A instruo DISPLAY bastante mais complexa, no captulo sobre gesto de crans voltaremos a
falar sobre ela.
Esta instruo envia para o cran uma mensagem constituida pelo conjunto de variveis e strings definidas na instruo. Em alguns dos exemplos anteriores, esta instruo j foi usada na sua forma mais simples.
% cat display.4gl MAIN DISPLAY "Isto vai aparecer no cran na linha 10 coluna 3" AT 10,3 ATTRIBUTE(BOLD) END MAIN % c4gl display.4gl % a.out APARECEU A FRASE DO DISPLAY NA linha 10 coluna 3 %
Figura 45 Programa utilizando DISPLAY AT com ATTRIBUTES"
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 39 / 103
7. GESTO DE ERROS
No 4GL existem vrios tipos de erros, depois de compilar com sucesso o seu programa, pode ainda
estar sujeito a erros. possivel que o programa ainda possua erros de lgica (bugs), ou que devido a uma m utilizao do programa, surja uma situao de erro. O utilizador de um programa, sem conhecimentos de programao nem acesso aos sources deve
receber uma mensagem de erro que o ajude a corrigir a sua utilizao ou remeter a correo para os programadores.
7.1. COMO APANHAR O ERRO
No 4GL existe a instruo WHENEVER que permite alterar a forma como o programa se comporta
ao ser confrontado com uma situao de erro ou aviso (warning).
WHENEVER {ERROR | WARNING} {GOTO label | CALL nome_de_funo | CONTINUE | STOP}
Figura 46 Definio genrica da instruo WHENEVER
A primeira opo nas clusulas informa sobre a situo (se ocorrer) para a qual se vai tomar determinada aco. As situaes so: erros e avisos. Numa situao de erro pediu-se ao programa que
efectuasse determinada tarefa que ele no pode efectuar dessa forma e nesse contexto, a instruo
WHENEVER utilizada com a clusula ERROR. Numa situao de aviso (warning) a tarefa pode ser cumprida ainda que no seja uma situao usual, a instruo WHENEVER evocada com a clusula WARNING.
A segunda clusula diz que aco tomar quando confrontado com uma situao.As aces possiveis
so:
GOTO label
Quando fr encontrada esta situao, o programa deve continuar a correr a partir da instruo assinalada por uma label. A label assinalada colocando um nome de label onde se pretende e o
caracter ":".
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 40 / 103
FUNCTION exp() WHENEVER ERROR GOTO erro
SELECT * INTO pr_livros.* FROM livros
RETURN
LABEL erro: DISPLAY "ERRO" END FUNCTION
Figura 47 Whenever com GOTO
CALL nome_de_funo.
Quando for encontrada uma situao de erro, executada a funo nome_de_funo.
FUNCTION exp() WHENEVER ERROR GOTO CALL erro()
SELECT * INTO pr_livros.* FROM livros
RETURN END FUNCTION
FUNCTION erro() DISPLAY "ERRO" END FUNCTION
Figura 48 Exemplo de WHENEVER com CALL
STOP
Quando utilizada a clusula STOP, o programa ao ser confrontado com uma situao de erro ou aviso cujo cdigo de erro seja negativo, o programa abortado e envia para o cran uma pequena explicao do erro ocorrido.
CONTINUE
Quando utilizada a clusula CONTINUE o programa numca pra em situao de erro do RDSQL, pelo que para haver controlo da execuo do programa, tem que testar a varivel status ou estrutura
SQLCA.
7.2. A VARIVEL STATUS
Existe em qualquer programa de 4GL uma varivel denominada status, pr-definida como global,
que afectada a 0 se no existiu erro e diferente de 0 se ocorreu algum erro na execuo de uma instruo.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 41 / 103
7.3. A ESTRUTURA SQLCA
Por vezes a varivel status no chega para identificar o erro ou aviso.Existe um RECORD chamado
SQLCA, global, que identifica os tipos de erros e avisos. Geralmente usa-se a estrutura SQLCA como adicional ao status que identifica a exist^encia de erro.
SQLCA RECORD SQLCODE INTEGER, SQLERRM CHAR[71], SQLERRP CHAR(8); SQLERRD ARRAY[6] OF INTEGER, SQLAWARN CHAR(8)
END RECORD
Figura 49 RECORD SQLCA O significado de cada uma das variveis :
SQLCODE: Indica o resultado de uma instruo de RDSQL.Toma os valores: 0 instruo bem sucedida.
NOTFOUND busca bem sucedida mas no devolveu nenhuma linha.
SQLERRM: no utilizado SQLERRP: no utilizado SQLERRD:
um array de 6 inteiros com o seguinte significado: sqlerrd [1]: no utilizado sqlerrd [2]: Valor retornado pelo C-ISAM (Ver erros do C-isam) sqlerrd [3]: nmero de linhas processadas sqlerrd [4]: no utilizado sqlerrd [5]: caracter da string em foi encontrado erro sqlerrd [6]: o ROWID da ltima linha
SQLWARN: E um array de 8 caracteres que assinalam vrias situaes que necessitam de aviso durante a
execuco de uma instruo RDSQL. sqlwarn[1]:
Se contiver:
Caracter W: Um ou mais dos outros elementos do array contm 'W'
Espao: No necessrio verificar os outros elementos do array.
sqlwarn[2]: Se contiver:
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 42 / 103
Caracter W: Os dados de uma ou mais colunas foi truncado para caber dentro de
uma varivel.
Espao: Nao houve truncagem de dados.
sqlwarn[3]: Se contiver:
Caracter W: Foi encontrado um erro numa funo agregada (SUM, AVG, MAX ou MIN) A NULL. Espao: No houve problemas.
sqlwarn[4]: Se contiver:
Caracter W: O nmero de items de um SELECT diferente do nmero de
variveis da clusula INTO.
Espao: No houve erro.
sqlwarn[5]: Nao utilizado sqlwarn[6]: Nao utilizado sqlwarn[7]: Nao utilizado sqlwarn[8]: Nao utilizado
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 43 / 103
8. GESTO DE ECRANS EM 4GL
Uma das principais tarefas quando se desenvolve uma aplicao a interao com o utilizador. Esta
tarefa geralmente muito demorada e extensa.
O 4GL, possui vrios mecanismos que facilitam a criao rpida e poderosa de crans de interao
com o utilizador.Concretamente existe um gestor de janelas; um compilador de entradas de dados; instrues de acesso s entradas de dados.
+------------+ +-------------------------------+ | form.frm || Instrues de acesso s forms | +------------+ +------>| | | +-------------------------------+ | | +---------------------------+ | +--->| Instrues bsicas de I/O | | | +---------------------------+ | | | | +--------------------+ | +------>| Gestor de janelas | +--------->| | +--------------------+
Figura 8.1 Interao entre os mdulos de gesto de crans
O mdulo "form.frm" um programa (habitualmente conhecido como form) em que se define o formato do cran de entrada de dados a utilizar, compilado com o programa form4gl.
As instrues de acesso s forms fazem parte da linguagem 4GL, e tm como objectivo o acesso form. As principais so: OPEN FORM; DISPLAY; DISPLAY ARRAY; INPUT; INPUT ARRAY; etc.
Algumas instrues de I/O bsico j foram focadas, elas so: DISPLAY AT; PROMPT; MENU. A interao com o cran sempre efectuada por intermdio do gestor de janelas. Muitas das vezes o
programador no se apercebe deste facto.Existem algumas instrues e opes para controlar este gestor, das
quais se pode destacar: OPEN WINDOW; CURRENT WINDOW; CLOSE WINDOW; OPTIONS:
MESSAGE LINE; etc.
As forms e instrues de INPUT, por si s no acedem nem escrevem em tabelas. Nas forms
associam-se colunas de tabelas aos campos para que os programas possam definir os tipos de variveis
internas que vo utilizar, ou declaram-se directamente os campos a partir dos tipos bsicos.
O fluxo de informao de um cran para a base de dados poderia ser descrito pelo seguinte esquema:
+-------+ +---------------------------------+ | Ecran || Variveis internas ao programa |
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 44 / 103
| | forms e instrues de input/output | RDSQL___________| +---------------+ +---------+ | | Base de dados || SQLEXEC | entrou no menu Form.
O menu Form apresenta as seguintes sete opes:
MODIFY
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 45 / 103
Esta opo permite fazer alteraes a forms j existentes. Tal como na opo RUN aparece um cran com a lista das forms existentes para seleccionar uma delas. Ao escolher uma form aparece-lhe o
source da form, num editor do sistema, pronto a ser alterado. Depois de concluidas as alteraes e de
ter sado do editor, aparece o menu MODIFY FORM com as seguintes opes:
COMPILE:
Compila a form. Se a form tiver erros estes so colocados num ficheiro juntamente com a form, podendo ento corrigi-la e compil-la de novo. Estes procedimentos
podem ser executados ciclicamente at obter uma compilao da form sem erros.
SAVE-AND-EXIT:
Grava as alteraes form no ficheiro fonte, sem executar compilao.
DISCARD-AND-EXIT:
No grava as alteraes form no ficheiro fonte, mantendo neste a verso anterior
ao inicio das alteraes. Tambm no executa compilao.
GENERATE
Cria automticamente uma form com um formato por defeito (default). Quando esta opo seleccionada aparecem crans para seleco da base de dados, se ainda no foi seleccionada, e para
escolha das tabelas que constituiro a form. Veremos mais em pormenor esta opo na seco
seguinte "Criao e Compilao duma Form Default".
NEW
Permite criar uma form num novo ficheiro atravs dum editor. Quando terminar a edio da form o INFORMIX-4GL comportar-se- de forma igual da opo MODIFY.
COMPILE
Compila uma form j existente. Apresenta um cran para seleccionar a form a compilar. Se a compilao falhar comportar-se- de forma igual da opo MODIFY.
EXIT
Retorna ao menu INFORMIX-4GL.
8.2. O PERFORM DEFAULT.
Uma das caracteristicas mais simpticas do form4gl a que permite gerar automticamente forms,
associadas a uma ou mais tabelas.
8.2.1. CRIAO DUMA FORM DEFAULT
Primeiro vamos posicionar-nos no menu FORM e seleccionar a opo GENERATE. --> Aparece o
cran NEW FORM, para a introduo do nome da form a gerar.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 46 / 103
O nome a digitar ser o nome com que a form ser conhecida a partir daqui, e fica escolha do
programador.
Digite "autores" e faa RETURN. --> Aparece o cran CHOOSE TABLE com a lista das tabelas da
base de dados livros, para que possa seleccionar as tabelas que faro parte da form.
Seleccione a tabela autores. --> Aparece o menu CREATE FORM, que pede para indicar se pretende
ou no seleccionar mais tabelas.
Como s se pretende uma form sobre a tabela autores seleccione a opo TABLE-SELECTION-
COMPLETE. --> Cria e compila a form "autores" e regressa ao menu FORM.
8.2.2. DESCRIO DUM PERFORM DEFAULT
Seleccione a opo MODIFY e a form "autores". --> Aparece um editor (de acordo com a varivel de sistema DBEDIT ou o usado anteriormente na mesma sesso de trabalho), com o seguinte source de uma form.
database livros screen { numero [f000 ] nome [f001 ] [f002 ] } end tables autores attributes f000 = autores.numero; f001 = autores.nome[1,35]; f002 = autores.nome[36,70]; end
Figura 8.4
For_______________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 47 / 103
_________________________________________________________________________________
_________________________________________________________________________________
______________________________________________________________ntm a ligao entre a
varivel do cran (representada pelo seu cdigo de identificao) e uma coluna da tabela autores. Estas seces so o esqueleto de qualquer form. Manipulando e inserindo instrues nestas seces
conseguem-se criar e explorar as capacidades das forms.
Como exerccio tente alterar a apresentao e a colocao das variveis e do texto livre da form
gerada anteriormente. Para isso altere apenas as instrues da screen section, desenhando um cran a seu
gosto, mantendo os cdigos e comprimentos mximos das variveis. Utilize a opo MODIFY.
8.3. O FORM4GL, A INSTRUO INPUT E AS SUAS CAPACIDADES
Neste captulo vamos descrever a maior parte das instrues do form4gl e as instrues do 4GL que
permitem a interao com as forms. Estas iro sendo introduzidas durante as vrias fases do processo de
desenvolvimento de um cran complexo, com vrias tabelas, validaes, mensagens de erro, etc.
Seleccionaram-se as instrues normalmente utilizadas nos tipos de crans que fazem parte de qualquer
aplicao.
O cran que se vai construir comea por ser uma proposta genrica, sendo desenvolvida e
aperfeioada por etapas. A ordem de apresentao destas a que normalmente se utiliza na prtica, salvo
nalgumas situaes para facilitar a exposio.
A proposta de partida e' a seguinte:
Pretende-se um nico cran para trabalhar com as tabelas livros, escritos, temas e editores da base de
dados livros, nomeadamente para poder visualizar simultneamente um livro (livros) os autores do livro (escritos) e os temas focados (temas). As entradas referentes a escritos, e temas devem aparecer em janelas diferentes.
Os diversos campos devem ser validados (tipo de dados correcto, valores admissiveis, etc.). Sempre que exista um erro deve ser assinalado com uma mensagem descrevendo o erro e o cursor deve
posicionar-se no campo em questo.
As colunas que contenham cdigos a procurar numa tabela devem possuir facilidades de busca na
tabela de descodificao.
Uma form de 4GL possui alguns limites e definies de que convm falar:
Todas as linhas para alm de n de linhas de um cran menos 4 so ignoradas.
Todos os crans para alm do 1 so ignorados. No nosso caso vo existir trs forms: uma para os
livros, uma para os autores do livro em causa e uma para os temas focados.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 48 / 103
8.3.1. DESENHO DA FORM LIVROS
Como ponto de partida vamos gerar a form de defeito livros para a tabela livros, obtendo-se o
esqueleto do programa com o comprimento e a ligao das colunas s tabelas j definidos. Para j no vamos efectuar validao do cdigo de editor com a respectiva descodificao. Crie o PERFORM default mencionado no pargrafo anterior.
Visualize-o usando a opo MODIFY, obtendo o seguinte programa:
database livros screen { numero [f000 ] nome [f001 ] [f002 ] traducao [f003 ] [f004 ] volumes [f005 ] paginas [f006 ] edicao [f007 ] ano [f008 ] data_entrada [f009 ] sala [f010 ] estante [f011 ] prateleira [f012 ] observacoes [f013 ] } end tables livros attributes f000 = livros.numero; f001 = livros.nome[1,30]; f002 = livros.nome[31,60]; f003 = livros.traducao[1,30]; f004 = livros.traducao[31,60]; f005 = livros.volumes; f006 = livros.paginas; f007 = livros.edicao; f008 = livros.ano; f009 = livros.data_entrada; f010 = livros.sala; f011 = livros.estante; f012 = livros.prateleira; f013 = livros.observacoes; end
A seguir vamos trabalhar sobre a seco Screen para obter o desenho do cran pretendido,
considerando que:
Todos os campos devem estar presentes num nico cran.
Uma soluo para o cran pretendido poder ser a que se apresenta na screen section seguinte:
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 49 / 103
SCREEN {
NUMERO DO LIVRO [f000 ] NOME DO LIVRO [f001 ] TRADUCAO [f004 ] VOLUMES [f007 ] PAGINAS [f008 ] EDICAO [f009 ] ANO [f010] DATA DE ENTRADA [f011 ] COLOCACAO: Sala [f012 ] Estante [f013 ] Prateleira [f014 ] OBSERVACOES [f015 ] }
Figura 8.5 Screen section da form livros
8.3.2. ESPECIFICAO DAS TABELAS
As tabelas intervenientes so indicadas na seco "tables" do programa.
No nosso caso no necessrio alterar a tables section da form default criada anteriormente, que
ser:
TABLES livros
Figura 8.6 TABLES section da form livros
Para j no se vai efectuar nenhuma alterao na attribute section, vamos antes optar por fazer o esqueleto do programa de 4GL que vai gerir a form.
8.3.3. PROGRAMA DE GESTO DA FORM LIVROS - VERSO 1
Sempre que se pretenda manusear uma form deve-se abri-la.
A abertura de uma form faz-se por intermdio da instruo OPEN FORM.
OPEN FORM nome_da_form FROM "ficheiro_da_form"
Figura 8.7 Definio genrica da instruo OPEN FORM
O Nome da form dado pelo programador e com esse nome que se passa a a referenciar o cran
dentro do programa. "ficheiro_da_form" o ficheiro em que se encontra a formcompilada retirando a
extenso ".frm".
OPEN livros FROM "livros"
Figura 8.7 Abertura da form livros
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 50 / 103
Neste caso foi resolvido identificar a form livros com o mesmo nome do ficheiro.
Na form livros vo-se editar todas as colunas da tabela livros. O programa deve ter variveis para
todas as colunas, podemos declarar facilmente um record que contenha todas as colunas da tabela livros.
DEFINE pr_livros LIKE livros.*
Figura 8.9 Declarao do record pr_livros
Antes de qualquer aco sobre a entrada de dados, deve-se mostrar esta no ecran sem qualquer dado.
Para efectuar esta aco usa-se a instruo DISPLAY FORM.
DISPLAY FORM nome_da_form ATTRIBUTE(lista_de atributos)
Figura 8.10 Definio genrica da instruo DISPLAY FORM
Este programa vai ter um menu que permite as seguintes opes sobre a tabela de livros:
NOVO
Adiciona um novo livro tabela de livros.
MUDAR
Muda a linha presente no cran, se existir corrente.
PROCURAR
Procura um livro por nmero.
REMOVER
Remove, se existir, a linha presente no cran.
FIM
Sai do programa.
Para criar menus utiliza-se a instruo MENU j estudada anteriormente.
MENU "LIVROS" COMMAND "Novo" "Adiciona um novo livro" CALL novo() COMMAND "Procurar" "Procurar um livro pelo numero" CALL procurar() COMMAND "Mudar" "Permite mudar o livro corrente" CALL mudar() COMMAND "Remover" "Remove o livro corrente" CALL remover() COMMAND "Fim" "Sai do programa" END MENU
Figura 8.11 Menu da entrada de dados para livros
A funo novo recebe os dados de um livro do teclado e insere-o na base de dados.
A instruo que se utiliza para editar uma form (para receber dados por intermdio de uma form), a instruo INPUT.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 51 / 103
Esta instruo tem como parmetros um conjunto de nomes de campos (que correspondem aos campos que se pretende editar) que foram prviamente identificados na seco attributes da form e um conjunto de variveis que tambm podem ser definidas de vrias formas. tambm possivel executar instrues e controlar o movimento do cursor condicionalmente posio do cursor.
INPUT [BY NAME lista_de_variaveis [WHITHOUT DEFAULTS] |lista_de_variaveis [WITHOUT DEFAULTS] FROM {lista_campos|screen_record[[n]].*}[,...}} [HELP numero_do_help] [{BEFORE FIELD sublista_de_campos |AFTER {FIELD sublista_de_campos|INPUT} |ON KEY(lista_de_teclas)} instruo ...
[NEXT FIELD nome_do_campo] ...
[EXIT INPUT] ...
...
END INPUT
Figura 8.12 Definio genrica de uma instruo INPUT
Nesta funo vamos utilizar a instruo INPUT na sua forma mais simples.
FUNCTION novo() INPUT BY NAME pr_livros.*
WHENEVER ERROR CONTINUE INSERT INTO livros VALUES(pr_livros.*) IF status = 0 THEN ERROR "Livro inserido" ELSE ERROR "Erro na insercao do livro",status END IF WHENEVER ERROR STOP END FUNCTION
Figura 8.12 Introduo de novo livro
A lista de campos da clusula FROM, neste caso est implicita no caracter '*' do record. Isto quer
dizer que vo ser editados todos os campos que existem na varivel composta pr_livros. Como a varivel foi
declarada LIKE livros.*, vo ser editados todas as colunas da tabela livros.
A instruo INSERT efectuada como foi definida no RDSQL tendo na clusula VALUES, as variveis que contm os valores pretendidos.
As instrues WHENEVER aparecem para que o programa no pare a sua execuo, e seja enviado um erro de SQL quando houver erro no INSERT (ver tratamento de erros).
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 52 / 103
A funo procurar, recebe o nmero do livro que se pretende procurar, procura-o na base de dados, e
mostra no cran todos os dados correspondentes. Note que o nmero do livro introduzido na form.
FUNCTION procurar()
CLEAR FORM
INPUT BY NAME pr_livros.numero
SELECT * INTO pr_livros.* FROM livros WHERE numero = pr_livros.numero
IF status != 0 THEN ERROR "Livro nao existente" ELSE DISPLAY BY NAME pr_livros.* END IF
END FUNCTION
Figura 8.13 Funo que procura um livro com determinadonmero"
A instruo CLEAR FORM serve para limpar todos os campos existentes na form corrente
Se a busca foi bem sucedida faz-se um display de todas as colunas da tabela.
A funo mudar altera um livro que tenha sido prviamente procurado ou inserido, ou seja, se este estiver no cran.
Esta funo aceita os valores sem limpar variveis e sem limpar a form, validando a existncia de um
livro vlido.
FUNCTION mudar() IF pr_livros.numero IS NULL THEN ERROR "Nao ha nenhum livro para mudar" ELSE INPUT BY NAME pr_livros.* WITHOUT DEFAULTS UPDATE livros SET livros.* = pr_livros.* ERE livros.numero = pr_livros.numero END IF END FUNCTION ____________________________________________________________
Figura 8.14 Alterao de um livro
feito um teste varivel pr_livros.numero para garantir que esta est preenchida com um nmero de livro existente.
A instruo INPUT aparece com a clusula WITHOUT DEFAULTS. Se esta clusula for omitida
faz com que a instruo INPUT, quando chamada, coloque nos campos, os defaults definidos nas forms ou no
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 53 / 103
ficheiro de defaults syscolval (ver utilitrio upscol). Se a clusula existir, os valores presentes nos campos durante o INPUT so os valores que esto dentro das variveis.
A instruo UPDATE est descrita no RDSQL, as variveis do 4GL colocam-se na clusula SET. A funo remover, remove o livro corrente.
Esta funo retira da base de dados o livro correspondente aos dados presentes no cran.
FUNCTION remover() IF pr_livros.numero IS NULL THEN ERROR "Nao ha nenhum livro para remover" ELSE DELETE FROM livros WHERE @numero = pr_livros.numero IF status != 0 THEN ERROR "Erro na remocao" ELSE INITIALIZE pr_livros.* TO NULL CLEAR FORM ERROR "Livro removido" END IF END IF END FUNCTION
Figura 8.15 Remoo de um livro
O teste da existncia de livro corrente feito da mesma forma que na funo mudar.
As instrues INITIALIZE e CLEAR FORM aparecem para garantir a no existncia de livros
correntes depois de uma remoo.
8.3.4. DEFINIO DE ATRIBUTOS (ATTRIBUTES SECTION)
Continuando o nosso exerccio, vamos agora desenvolver a Attributes Section. Esta define o
comportamento e o aspecto de cada um dos campos do cran definidos na Screen Section. Qualquer campo da Screen Section deve ser descrito na Attributes Section.
Na Attributes Section define-se:
Como o form4gl apresenta o campo no cran.
Limites para os valores a entrar no campo do cran.
O tipo do campo por duas formas: a coluna e tabela a que corresponde ou tipo elementar do 4GL.
O nome do campo para as instrues de 4GL que tratam do manuseamento de crans. Se o campo fr
formonly, pode-se escolher o nome, seno o nome o da coluna a que corresponde.
Se qualquer um dos atributos descrito for utilizado, quando se faz um INPUT sem a clusula
WHITHOUT DEFAULTS, os defaults utilizados so os dos attributes, caso contrrio sero utilizados os
defaults da tabela syscolval.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 54 / 103
A seguir iremos descrever todos os atributos disponiveis e aplicar, na form livros, os de uso mais
comum. 8.3.4.1. AUTONEXT
Este atributo faz com que o cursor, durante uma instruo de INPUT ou CONSTRUCT, salte para o
campo seguinte quando o campo actual estiver totalmente preenchido.
muito til e na form livros iremos us-lo nas datas. Exemplo:
f011 = livros.data_entrada, autonext;
8.3.4.2. COMMENTS
Este atributo associa uma mensagem a um campo. Esta mensagem aparecer na linha correspondente
do cran sempre que o cursor se encontre no campo respectivo.
Na form livros iremos aplic-lo ao campo data_entrada com a seguinte mensagem:
"Introduza a data em que o livro entrou na biblioteca"
Exemplo:
f011 = livros.data_entrada, autonext, comments = "Introduza a data em que o livro entrou na biblioteca";
8.3.4.3. DEFAULT
Insere um valor inicial no campo do cran a que est associado, quando se evoca a instruo INPUT.
Na form livros iremos aplic-lo aos campos volumes, sala e data_entrada. Neste ltimo campo (a data da entrada do livro) vai-se inserir a data do dia, escrevendo "today" como valor inicial. Exemplo:
f011 = livros.data_entrada, autonext, default = today;
8.3.4.4. FORMAT
Permite controlar o formato de display dos campos a que est associado, desde que tenham tipo de
dados DECIMAL, FLOAT, SMALLFLOAT ou DATE.
Os caracteres de controlo do formato so os seguintes:
###.##
Para campos numricos (decimal, float e smallfloat). Indica o nmero de campos esquerda e direita do ponto decimal.
mm
Para datas. Representao do ms atravs de dois dgitos.
mmm
Para datas. Representao do nome do ms atravs de abreviatura com trs letras (em ingls). dd
Para datas. Representao do dia atravs de dois dgitos.
ddd
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 55 / 103
Para datas. Representao do nome do dia atravs de abreviatura com trs letras (em ingls). yy
Para datas. Representao do ano atravs de dois dgitos.
yyyy
Para datas. Representao do ano atravs de quatro dgitos.
As datas podem ter os separadores "-" ou "/" escolha.
Na form livros iremos usar o atributo "format" apenas nas datas e com o formato "yyyy/mm/dd".
Exemplo:
f011 = livros.data_entrada, autonext, default = today, format = "yyyy/mm/dd";
8.3.4.5. INCLUDE
Permite especificar valores ou intervalos de valores admissiveis a introduzir no campo associado a
este atributo.
Pode especificar uma srie de valores separados por virgulas ou um valor mnimo e um valor
mximo separados pela palavra "to".
Na form livros vamos usar o atribute include nos campos:
volumes: Admitindo que um livro no pode ter mais de 100 volumes (1 a 100). Exemplo:
f007 = livros.volumes, include = (1 to 100);
8.3.4.6. NOENTRY
Permite evitar a insero de dados quando executa uma instruo INPUT 8.3.4.7. REQUIRED
Este atributo torna a insero obrigatria na coluna a que for associado, durante a execuo da
instruo INPUT.
Na form livros vamos tornar a insero obrigatria nas seguintes colunas: livros.numero,
livros.nome. Exemplo:
f000 = livros.numero,required;
8.3.4.8. REVERSE
Este atributo mostra os campos, a que est associado, com fundo luminoso (reverse video). Na form livros vamos usar em reverse video o campo nmero. Exemplo:
f000 = livros.numerlo, reverse;
8.3.4.9. PICTURE
Permite definir a forma dum campo do cran, com tipo de dados alfanumrico.
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 56 / 103
A forma do campo define-se, no atributo "picture", combinando om qualquer outro caracter os
seguintes caracteres:
A Representa qualquer letra.
# Representa qualquer dgito.
X Representa qualquer caracter. 8.3.4.10. VERIFY
Este atributo usa-se quando se pretende introduzir, num determinado campo, o mesmo valor duas
vezes para reduzir a probabilidade de erro na entrada dos dados. 8.3.4.11. DOWNSHIFT
Transforma as letras maisculas, dum campo alfanumrico, em letras minsculas. 8.3.4.12. UPSHIFT
Transforma as letras minsculas, dum campo alfanumrico, em letras maisculas. 8.3.4.13. A Attributes Section da form livros
Apresenta-se a seguir a Attributes Section do ecran proposto como o objectivo de alcanar o que foi sendo descrito ao longo dos ltimos captulos.
ESCREVER AQUI A SECO DE ATTRIBUTES
8.3.5. A INSTRUCTION SECTION
A Instruction Section a ltima seco da form e opcional.
No 4GL a nica operao que podemos efectuar nesta seco a instruo DELIMITERS e a
definio de SCREEN RECORDS. 8.3.5.1. Alterao dos Caracteres de Enquadramento - DELIMITERS
Com o comando "delimiters" pode alterar os caracteres de enquadramento do campo do ecran,
quando este visualizado atravs da execuo da form pelo PERFORM. Os caracteres default so os
parntesis rectos "[...]". Exemplo:
delimiters "{}"
em que "{" o caracter de abertura e "}" o caracter de fecho.
8.4. OUTRAS CAPACIDADES DA INSTRUO INPUT E OUTROS ATTRIBUTES DAS FORMS
No captulo anterior a instruo INPUT foi utilizada na sua forma mais simples. Para alm da
clusula onde se definem as variveis, a instruo INPUT pode ser utilizada com mais clusulas,
nomeadamente:
HELP numero
Manual Informix 4GL
MoreData Sistemas de Informao, Lda. 57 / 103
Quando a tecla de help fr pressionada, durante a edio de uma form, automticamente executada a funo show_help, que apresenta o help relativo ao nmero especificado (ver helps).
BEFORE FIELD nome
Antes da edio da coluna cujo nome especificado o programa cumpre as instrues es