Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduo
Introduo
y Progress um ambiente de desenvolvimento de
Introduo
y flexvel, aberto e completo. y Flexvel, pois assegura portabilidade entre plataformas; y Aberto, pois suporta padro industrial; y Completo, pois permite a construo de grandes aplicaes e possui solues Client/Server.
omponentes da Linguagem
y Blocos; y Declaraes; y Funes; y Operadores; y Variveis; y Expresses; y Smbolos Especiais; y Elementos de Interface com o Usurio; y Eventos.
omponentes Lgicos
y Tabelas; y Registros; y Campos; y ndices.
omponentes Fsicos
y Database (Banco de Dados)
Contm os dados da
base. y Before-Image Contm imagem dos dados durante uma transao. Caso houver algum problema ou a transao for desfeita, os dados alterados sero desfeitos. y Log Contm as referncias de acesso base. y Lock Informa se a base est sendo acessada.
Formato
x(10) Alfanumrico A(10) Alfabtico !x(10) Letras Maisculas >>>,>>9 Nmero sem espaos zzz,zz9 Nmero com espaos 999,999 Preenche com 0 >>>,>>9.999
Exemplo
x(40) String alfanumrica AAA-9999 PRO-2012 !x(20) STRING MAISCULAS >>>,>>>,>>9 2.012 zz,zzz,zz9 10 99,999,999 00.000.034 >>,>>>.>>9 2.012,970 zz,zz9.9 10,9 99,999.99 00.034,05 Yes/No No True/False True Sim/No No 99/99/9999 12/31/2011 99/99/99 12/31/11
Definio de Variveis
y DEFINE VARIABLE <nome da varivel> AS <tipo>
Definio de Variveis
Message (Mensagem)
y MESSAGE <mensagem>
Recebe os valores dos botes YES ou NO . y Tipo de Mensagem: INFO/WARNING/QUESTION/ERROR. y BUTTONS: OK/OK-CANCEL/YES-NO/YES-NOCANCEL/RENTRY-CANCEL. y TITLE Ttulo da caixa de mensagem.
Message (Mensagem)
y Exemplo:
MESSAGE Treinamento Progress VIEW-AS ALERT-BOX INFO BUTTONS OK. MESSAGE Deseja continuar? UPDATE l-resp VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO TITLE Pergunta . MESSAGE Cliente no encontrado! VIEW-AS ALERT-BOX ERROR BUTTONS RETRY-CANCEL.
Message (Mensagem)
Funo
y TODAY Retorna a data atual; y TIME y y y y
Retorna a hora atual, em segundos; DAY(<data>) Retorna o DIA da data fornecida; MONTH(<data>) Retorna o MS da data fornecida; YEAR(<data>) Retorna o ANO da data fornecida; WEEKDAY(<data>) Retorna o dia da semana, em nmeros.
Funo
y Exemplo: ASSIGN dt-compra = TODAY.
MESSAGE Data atual: STRING(TODAY, 99/99/9999 ) SKIP Hora atual: STRING(TIME, hh:mm:ss ) SKIP Dia: DAY(TODAY) SKIP Ms: MONTH(TODAY) SKIP Ano: YEAR(TODAY) SKIP Dia Semana: WEEKDAY(TODAY) VIEW-AS ALERT-BOX INFO BUTTONS OK TITLE Atual .
Base de Dados
Buffer de Registro
Buffer de Tela
Movimentao de Dados
Base de Dados
Buffer de Registro
Buffer de Tela
Base de Dados
Buffer de Registro
Buffer de Tela
Movimentao de Dados
y Os dados da Base de Dados no sero manipulados at
que sejam movimentados para o Buffer de Registro; y Os dados do Buffer de Registro no sero manipulados pelo usurio at que movimentados para o Buffer de Tela; y Os dados manipulados pelo usurio no sero atualizados na Base de Dados at que sejam movimentados pelo Buffer de Tela e Buffer de Registro.
Manipulao de Dados
Manipulao de Dados
y CREATE
responsvel por criar um registro na Base de Dados, com valores padres inicializados e o registro ser disponibilizado no Buffer de Registro;
y Exemplo: CREATE cliente.
Manipulao de Dados
y DISPLAY
responsvel por mostrar os valores em tela, movendo os dados do Buffer de Registro para o Buffer de Tela, porm os dados devem estar disponveis no Buffer de Registro.
y Exemplo: DISPLAY cliente.nome.
Manipulao de Dados
y PROMPT-FOR
responsvel por solicitar a Entrada de Dados do Usurio disponvel no Buffer de Tela e o disponibiliza no mesmo.
y Exemplo: PROMPT-FOR cliente.nome.
Manipulao de Dados
y ASSIGN
responsvel por atualizar os dados no Buffer de Registro, movimentando os dados do Buffer de Tela para o Buffer de Registro.
y Exemplo: DEFINE VARIABLE c-nome AS CHARACTER.
CREATE cliente. PROMPT-FOR c-nome. ASSIGN cliente.nome = c-nome.
Manipulao de Dados
y SET
responsvel por solicitar a Entrada de Dados do Usurio disponvel no Buffer de Tela, disponibilizla no mesmo e atualizar os dados do Buffer de Tela para o Buffer de Registro. Este comando tem a funo do PROMPT-FOR e ASSIGN.
y Exemplo: CREATE cliente. SET cliente.nome.
Manipulao de Dados
y UPDATE - responsvel por solicitar a Entrada de
Dados do Usurio disponvel no Buffer de Tela, disponibiliz-la no mesmo, atualizar os dados do Buffer de Tela para o Buffer de Registro e atualizar os dados do Buffer de Registro para a Base de Dados. Este comando tem a funo do DISPLAY, PROMPT-FOR e ASSIGN.
y Exemplo: CREATE cliente. UPDATE cliente.nome
Manipulao de Dados
y INSERT
responsvel por criar um novo registro na Base de Dados, disponibiliza o registro no Buffer de Registro, depois no Buffer de Tela, solicita a Entrada de Dados do Usurio, movimenta os dados para o Buffer de Registro e depois para a Base de Dados. Este comando tem a funo do CREATE, DISPLAY, PROMPT-FOR e ASSIGN.
y Exemplo: CREATE cliente. INSERT cliente.
Manipulao de Dados
y DELETE
responsvel por eliminar o registro do Buffer de Registro e da Base de Dados, porm os dados devem estar disponveis no Buffer de Registro.
y Exemplo: DELETE cliente.
Manipulao de Dados
y RELEASE
Ele limpa o registro do Buffer de Registro e atualiza o registro que estava disponvel no Buffer de Registro na Base de Dados.
y Exemplo: CREATE cliente. UPDATE cliente.nome. RELEASE cliente.
Quadro de Comandos
INSERT UPDATE SET DELETE CREATE DISPLAY PROMPT-FOR ASSIGN FIND FOR EACH RELEASE
Operadores
y NOT IF NOT cliente.ativo THEN NEXT. y AND IF cliente.ativo AND
y y y y y y
cliente.limite = 0 THEN ASSIGN cliente.ativo = NO. OR IF cliente.limite > 0 OR cliente.ativo THEN ASSIGN cliente.limite = cliente.limite + 10. = Igual <> Diferente > Maior >= Maior ou igual < Menor <= Menor ou igual
Ateno!!
y No Progress, para finalizar as declaraes, utiliza-se
ponto (.), ao contrrio da maioria das linguagens de programao existente, onde usa-se pont0-e-vrgula (;).
y Exemplo:
CREATE cliente
ASSIGN cliente.nome.
Exerccios
Exerccio 1
y Construa um programa que permita a incluso de um
Blocos
Blocos
y FOR EACH
responsvel por localizar UM ou MAIS registros na Base de Dados e disponibiliz-los no Buffer de Registro.
y Exemplo: FOR EACH cliente: DISPLAY cliente. END.
Blocos
y REPEAT
responsvel pelo lao de repetio no Progress, sendo que o mesmo continua a interagir at que encontre uma condio de trmino ou o ENDERROR.
y Exemplo: REPEAT: PROMPT-FOR c-nome. CREATE cliente. ASSIGN cliente.nome = c-nome. END.
Blocos
y DO
Exemplo: REPEAT: PROMPT-FOR c-nome. IF c-nome = sair THEN NEXT. CREATE cliente. ASSIGN cliente.nome = c-nome. END.
responsvel em ir para o final (END) de um bloco e iniciar uma novo interao do bloco.
y Exemplo: FOR EACH cliente: IF cliente.ativo = NO THEN NEXT. ASSIGN cliente.limite = 2000. END.
Exerccios
Exerccio 2
y Construa um programa que permita a incluso de
Exerccio 3
y Construa um programa que permita alterar vrios
Localizando Registros
Localizando Registros
y FIND
y y y y
y NO-ERROR y AVAILABLE
y Exemplo:
Localizando Registros
y WHERE
Localizando Registros
y INPUT
Localizando Registros
y USING
Localizando Registros
y OF
utilizado para substituir o WHERE no relacionamento entre tabelas, utilizando o ndice da tabela.
y Exemplo: FIND FIRST cliente NO-ERROR.
IF AVAILABLE cliente THEN DO: FOR EACH pedido OF cliente: DISPLAY pedido.num-pedido pedido.dt-pedido. END. END.
Localizando Registros
y USE-INDEX
Localizando Registros
y BY
usado na busca de registros, ordenando por determinado campo. Se acompanhado pela clausula DESCENDING, a ordenao ser do maior para o menos.
y Exemplo: FOR EACH cliente BY cliente.dt-nasc: DISPLAY cliente.codigo cliente.nome. END.
Localizando Registros
y CONTAINS
responsvel pela busca de uma determinada palavra ou parte dela em atributos do tipo WORD-INDEX.
y Exemplo: FOR EACH cliente WHERE cliente.nome CONTAINS Oliveira : DISPLAY cliente.codigo cliente.nome. END.
Localizando Registros
y MATCHES utilizado para verificar se uma expresso contm parte da outra expresso.
y Se o asterisco for colocado no incio da segunda expresso, ser
comparado apenas com o final da primeira expresso. Se o asterisco for colocado no final da segunda expresso, ser comparado com o incio da primeira expresso. Se o asterisco for colocado no incio e no final da segunda expresso, ser comparado com a primeira expresso inteira. y Neste caso, no ser utilizado ndice.
y Exemplo: FOR EACH cliente WHERE cliente.nome MATCHES *Silva* : DISPLAY cliente.codigo cliente.nome. END.
Localizando Registros
y BEGINS
utilizado para verificar se uma expresso inicia com uma outra expresso. y Se houver um ndice para o campo, ele ser utilizado.
y Exemplo: FOR EACH cliente WHERE cliente.nome BEGINS Joo : DISPLAY cliente.codigo cliente.nome. END.
Localizando Registros
y BUFFER
y Exemplo: DEFINE BUFFER bf-cliente FOR cliente. FIND FIRST cliente NO-ERROR. IF AVAILABLE cliente THEN DO: FIND FIRST bf-cliente WHERE bf-cliente.nome = cliente.conjuge NO-ERROR. IF NOT AVAILABLE bf-cliente THEN DO: CREATE bf-cliente. ASSIGN bf-cliente.nome = cliente.conjuge. UPDATE bf-cliente. END. END.
Localizando Registros
y QUERY
tabelas.
y Exemplo: DEFINE QUERY qr-cliente FOR cliente SCROLLING. OPEN QUERY qr-cliente FOR EACH cliente NO-LOCK WHERE cliente.ativo = YES.
Localizando Registros
y GET utilizado para buscar registros de uma query previamente aberta. Este comando utilizado juntamente com FIRST, NEXT, PREV e LAST.
y Exemplo: DEFINE QUERY qr-cliente FOR cliente SCROLLING. OPEN QUERY qr-cliente FOR EACH cliente NO-LOCK WHERE cliente.ativo = YES. GET FIRST qr-cliente. REPEAT: DISPLAY cliente. GET NEXT qr-cliente. IF NOT AVAILABLE cliente THEN NEXT. END.
Exerccios
Exerccio 4
y Busque todos os registros da tabela customer ,
mostrando os campos custnum , name , salesrep e mostre o campo repname da tabela referncia do campo salesrep (tabela salesrep ), usando a chave como referncia.
Exerccio 5
y Construa um programa que busque o ultimo registro
Exerccio 6
y Construa um programa que utilize QUERY, que mostre
todos os registros da tabela customer , onde o campo name comesse com a letra L .
Exerccio 7
y Construa um programa que solicite o cdigo do cliente
(campo custnum da tabela customer ), localize o registro pelo cdigo solicitado e disponibilize o mesmo para alterao do limite (campo creditlimit da tabela customer ).
Exerccio 8
y Construa um programa que mostre todos os clientes
(tabela customer ) ordenado pelo pas (campo country da tabela customer ), mostrando apenas os campos custnum , name , creditlimit e country .
Exerccio 9
y Construa um programa que solicite o representante do
cliente (campo salesrep da tabela customer ), busque e mostre todos os clientes (tabela customer ) com este representante ( salesrep ).
Processamento Condicional
Processamento Condicional
y IF <condicao> THEN y ELSE
y Exemplo: IF customer.creditlimit < 10000 THEN MESSAGE Crdito menor de 10.000,00 VIEW-AS ALERT-BOX INFO BUTTONS OK. ELSE MESSAGE Crdito maior que 10.000,00 VIEW-AS ALERT-BOX WARNING BUTTONS OK.
Processamento Condicional
y CASE <expresso>:
WHEN <valor> THEN WHEN <valor> THEN DO: END. OTHERWISE DO: END. END CASE.
Exerccios
Exerccio 10
y Construa um programa que busque o primeiro registro
da tabela customer , se o pas (campo country ) for igual a USA , mostrar a mensagem Estados Unidos , seno, motrar a mensagem Outro pas .
Exerccio 11
y Construa um programa que busque o primeiro cliente
com o nome (campo name ) iniciado pela letra T . Caso o representante (campo salesrep ) seja igual a BBB , exiba a mensagem Bubba B. Brawn , caso seja igual a DKP , exiba a mensagem Dirk K. Pitt , caso seja igual a DOS , exiba a mensagem Donna Swindall e se for outro, exiba a mensagem Outro Representante .
Frames
Conceito
y Frame a rea retangular dentro do Progress usada
Exemplo de Uso
FOR EACH cliente: DISPLAY cliente.codigo cliente.nome WITH FRAME f-abc DOWN CENTERED. END.
y DOWN
Apresenta em uma s tela mltiplas interaes, caso contrrio, apresentar somente uma. y CENTERED Centraliza as informaes na tela
Definio de Frame
y A definio de uma frame serve para apresentar uma forma de como a informao ser apresentada dentro de um ou mais procedimentos, podendo definir com ou sem label, posicionamento, linha em que a informao ser apresentada e at mesmo o formato do campo.
y Exemplo: DEFINE FRAME f-abc cliente.codigo NO-LABEL SKIP(2) cliente.nome AT 10 SKIP cliente.dt-nasc COLON 20 SKIP cliente.ativo COLON 20 SKIP WITH SIDE-LABELS OVERLAY.
Form
y A Form serve para definir como a informao ser
apresentada dentro de uma Frame, podendo a Frame ter VRIAS Forms, porm caso no seja definida uma Frame para a Form, o Progress define automaticamente.
y Exemplo:
FORM cliente.codigo NO-LABEL SKIP(2) cliente.nome AT 10 SKIP WITH FRAME f-pagina.
Posicionamento
y AT Alinhamento pela direita; y TO Alinhamento pela esquerda; y COLON Alinhamento pelos dois pontos (:).
y Exemplo: y AT:
y
TO: COLON:
Cdigo: 100 Nome: Joo Cdigo: 101 Nome: Maria Cdigo: 102 Nome: Pedro
Manipulao de Frame
y y y y
VIEW Apresenta uma frame; HIDE Apaga uma frame; CLEAR Apaga o contedo de uma frame; PAUSE Suspende a execuo at um certo tempo passar ou at que uma tecla seja pressionada.
y Exemplo: VIEW FRAME f-pagina. HIDE FRAME f-123 NO-PAUSE. CLEAR FRAME f-abc ALL NO-PAUSE. PAUSE. PAUSE 5.
Exerccios
Exerccio 12
y Construa um programa que mostre os dados de um
cliente (tabela customer ), os dados de seu representante (tabela salesrep ) e os seus pedidos (tabela order ).