
Iniciar uma leitura seqüencial no arquivo selecionado.
LOCATE [LAST] | [START <exp>] [FOR<exp.L>]
|
LAST |
determina que a leitura se dará do último registro para o primeiro. |
|
START <exp> |
determina que a leitura se inicie a partir do registro com o valor da chave igual ou maior que <exp>. |
|
FOR <exp.L> |
determina que só serão lidos os registros que satisfaçam a expressão lógica. |
Quando se pretende iniciar uma leitura seqüencial em um arquivo selecionado.
Quando utilizado sem opções, lê o primeiro registro do arquivo segundo a chave estabelecida ou pelo arquivo de dados caso este não tenha chave ou não se estabeleça uma chave de acesso.
A opção START é útil quando se sabe o início da leitura. É muito utilizada na pesquisa de intervalos pois limita o início da pesquisa lendo diretamente o registro.
A opção FOR é útil quando se pretende ler somente alguns registros .
A opção START só é aplicável em arquivos de banco de dados.
A opção LAST é útil quando se pretende paginar o arquivo e caminhar por entre seus registros para trás. A opção LAST não é aplicável em arquivo externo indexado.
A função EOF( ) retorna verdade (.T.), sempre que se chegar ao fim da pesquisa. Com a opção FOR quando mais nenhum registro atender a expressão. Com a opção LAST quando a leitura atingir o início do arquivo.
O comando LOCATE apenas inicia a leitura. Para prosseguir, utilizar o comando CONTINUE.
O exemplo a seguir lê um arquivo do primeiro registro ao último.
DATABASE bdemp1 33 a 2
USE tab_depe
LOCATE && Le o primeiro registro do arquivo.
DO WHILE FOUND( )
? "Numero do registro ",recno( )
? "Funcionário ", nom_func
? "Data de Nascimento do Dependente "
?? TRANSFORM("99/99/99",dat_depe)
?
CONTINUE && Le os próximos registros do arquivo
ENDDO
O exemplo a seguir lê um arquivo do último registro ao primeiro.
DATABASE bdemp1 33 a 2
USE tab_depe
LOCATE LAST && Le o ultimo registro do arquivo.
DO WHILE FOUND( )
? "Numero do registro ",recno( )
? "Funcionário ", nom_func
? "Data de Nascimento do Dependente "
?? TRANSFORM("99/99/99",dat_dep)
?
CONTINUE
ENDDO
O exemplo a seguir lê somente os registros dos funcionários do sexo feminino.
USE tab_func
LOCATE FOR sex_func = "fem"
DO WHILE .not. EOF( )
? "Nome da Funcionaria ", nom_func
CONTINUE
ENDDO
O exemplo a seguir lê somente funcionários do sexo feminino nascidos entre 1930 e 1960.
USE tab_depe
SET ORDER TO ano_func
LOCATE START 1930 FOR sex_func = "fem"
DO WHILE FOUND( ) .and. ano_func <= 1960
&& delimita o intervalo
? nom_func
CONTINUE
ENDDO
O exemplo a seguir mostra-nos como paginar um arquivo lendo seus registros seqüencialmente de trás para frente ou de frente para trás.
USE funcion
LOCATE
sentido = "inicio -> fim"
DO WHILE FOUND( ) && Para quando atingir o inicio ou o fim do arquivo
? nomefun
? sentido
WAIT " Inverte o sentido ? " TO resp
IF resp $ "Ss"
REVERSE && Inverte o sentido da leitura.
CONTINUE
sentido = "fim -> inicio"
ENDIF
CONTINUE
ENDDO
$DATE, CONTINUE, FIND, RESTORE, REVERSE, SAVE, SET EXACT, SELECT, SORT, CTOD( ), DBERR( ), DTOC( ), DBMESS( ), EOF( ), FCONTINUE( ), FLOCATE( ), FRECNO( ), FSTART( ) e RECNO( ).
