Aula 08
Aula 08
Introdução à
08 Linguagem do Visual FoxPro
Parte 4
Existem vários tipos de desvios, que devem ser utilizados de acordo com a
necessidade específica de cada situação.
Sintaxe
DO WHILE lExpressão
Comandos
[LOOP]
[EXIT]
ENDDO
Argumentos
08
Comentários
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products && Abre a tabela Products
SET TALK OFF
PUBLIC gnStockTot
gnStockTot = 0
CLEAR
? 'Total de itens em estoque com valor igual ou superior a U$ 20,00:'
?? gnStockTot
08
1. Um banco de dados chamado testdata é aberto.
6. O trecho de código:
IF unit_price < 20
SKIP
LOOP
ENDIF
7. Nas linhas:
gnStockTot = gnStockTot + in_stock
SKIP
08
O Comando IF ... ENDIF
Sintaxe
IF lExpressão [THEN]
Comandos
[ELSE
Comandos]
ENDIF
Argumentos
Comentários
É possível aninhar um bloco IF... ENDIF dentro de outro bloco IF... ENDIF.
08
USE
Sintaxe
DO CASE
CASE lExpressão1
Comandos
[CASE lExpressão2
Comandos
...
CASE lExpressãoN
Comandos]
[OTHERWISE
Comandos]
ENDCASE
Argumentos
08
Apenas um conjunto de comandos é executado. É o primeiro conjunto de
comandos cuja expressão CASE resulta em verdadeiro (.T.). Qualquer
expressão CASE verdadeira (.T.) posterior será ignorada.
Comentários
CASE INLIST(mes,'Janeiro','Fevereiro','Março')
STORE 'Ganhos no primeiro trimestre' TO rpt_title
CASE INLIST(mes,'Abril','Maio','Junho')
STORE 'Ganhos no segundo trimestre' TO rpt_title
CASE INLIST(mes,'Julho','Agosto','Setembro')
STORE 'Ganhos no terceiro trimestre' TO rpt_title
OTHERWISE
STORE 'Ganhos no quarto trimestre' TO rpt_title
08
LOCAL lcMeses AS String, lnMes AS Number, lnPosicao AS Number
IF lnMes = 1
lnPosicao = 1
ELSE
lnPosicao = (lnMes * 9)-8
ENDIF
ENDFUNC
Sintaxe
SCAN [NOOPTIMIZE]
[Escopo] [FOR lReferência1] [WHILE lReferência2]
[Comandos]
[LOOP]
[EXIT]
ENDSCAN
08
Argumentos
Rushmore otimizará uma consulta criada com SCAN ... FOR se lReferência1
for uma expressão otimizável. Para obter um melhor desempenho, utilize
uma expressão otimizável na cláusula FOR.
Comentários
08
O comando SCAN avança automaticamente o ponteiro do registro para o
próximo registro que satisfaça as condições especificadas e executa o bloco
de comandos.
O exemplo a seguir utiliza um loop SCAN ... ENDSCAN para exibir todas as
empresas na Suécia.
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
UTILIZE customer && Abra a tabela Customer
CLEAR
Sintaxe
FOR Var = nValorInicial TO nValorFinal [STEP nIncremento]
Comandos
[EXIT]
[LOOP]
ENDFOR | NEXT
Argumentos
08
Comandos – Especifica os comando do Visual FoxPro a serem executados.
Comandos pode incluir qualquer número de comandos.
EXIT – Transfere o controle do loop FOR ... ENDFOR para o comando logo
depois de ENDFOR. EXIT pode ser colocado em qualquer parte entre FOR e
ENDFOR.
Comentários
* Exemplo 1
08
CLEAR
FOR gnCount = 1 TO 10
? gnCount
ENDFOR
* Example 2
SET TALK OFF
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre tabela Customer
STORE 2 TO gnI && Valor inicial
STORE 10 TO gnJ && Valor final
STORE 2 TO K && Valor Step
FOR gnCount = gnI TO gnJ STEP K
GOTO gnCount && Move o ponteiro do registro
DISPLAY company && Exibe o nome da empresa
ENDFOR
Sintaxe
FOR EACH Var IN Grupo
Comandos
[EXIT]
[LOOP]
ENDFOR | NEXT [Var]
Definição
Var – Uma variável ou elemento de matriz utilizado para interagir por meio
dos elementos de Grupo.
Grupo – Uma matriz do Visual FoxPro, uma matriz OLE, uma coleção do
Visual FoxPro ou uma coleção OLE.
EXIT – Transfere o controle do loop FOR EACH ... ENDFOR para o comando
imediatamente após ENDFOR. Pode-se colocar EXIT em qualquer parte
entre FOR EACH e ENDFOR.
08
LOOP – Retorna o controle diretamente para a cláusula FOR EACH sem
executar as instruções entre LOOP e ENDFOR. LOOP pode ser colocado em
qualquer parte entre FOR EACH e ENDFOR.
O próximo exemplo cria uma instância do Excel e adiciona uma nova pasta
de trabalho. Em seguida FOR EACH ... ENDFOR é utilizado para percorrer a
coleção oExcel.sheets exibindo o nome das planilhas contidas na pasta de
trabalho. Certifique-se de que o Excel esteja instalado em sua máquina antes
de executar este exemplo.
oExcel = CREATE("Excel.Application")
oExcel.Workbooks.ADD
FOR i = 1 to 5
THIS.AddObject('THIS.MyArray[i]',;
'COMMANDBUTTON')
ENDFOR
08
FOR EACH oButton IN THIS.MyArray
oButton.Visible = .T.
NEXT
j = 1
****** FOR EACH - ENDFOR ******
FOR EACH oButton IN THIS.MyArray
oButton.top = j * 30
j = j + 1
ENDFOR
j = 1
****** EXIT ******
FOR EACH oButton IN THIS.MyArray
oButton.Caption = "test" + str(j)
j = j+1
IF j > 3
EXIT
ENDIF
NEXT
j = 1
****** LOOP ******
FOR EACH oButton IN THIS.MyArray
IF j > 3
LOOP
ENDIF
j = j + 1
oButton.Left = 25
NEXT
ENDPROC
ENDDEFINE
Coleções
Coleções são como uma espécie de matriz que podem armazenar certos
tipos de informações de objetos ou entidades no Visual FoxPro. Desde suas
primeiras versões o Visual FoxPro já implementava em alguns objetos, as
coleções.
08
em objetos existentes. Agora podemos criar nossas próprias coleções e até
mesmo substituir o uso de matrizes em determinados pontos do nosso
código. Com isso, teremos uma abordagem totalmente orientada a objetos
na hora de implementarmos códigos com as coleções.
Apesar de seu conceito ir bem mais além, vamos ficar apenas com este
resumo sobre coleções para fins de complementarmos o conceito já visto
com o comando FOR EACH ... ENDFOR, logo acima.
Cláusulas Escopo