PROGRAMAÇÃO EM INFORMIX 4GL.pdf

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