Busca em Indice

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

negrao
Usuário Nível 3
Usuário Nível 3
Mensagens: 186
Registrado em: 06 Jul 2004 08:38

Busca em Indice

Mensagem por negrao »

Pessoal , ve se tem como
Tenho um arquivo com os seguintes registros:
01/01/2004
15/01/2004
20/03/2004
21/03/2004
01/11/2004

Esses registros estao indexados por dada,supondo que digite a data 05/02/2004.
Nao tem nenhum registro com essa data, tem como ele posicionar no registro mais perto, ou seja, o 15/01/2004 ?

Obrigado
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem por Toledo »

Negrao,

Basta você utilizar o comando SET SOFTSEEK ON antes do comando SEEK. Com o comando SET SOFTSEEK ON se o comando SEEK não achar o registro desejado, o ponteiro é posicionado no registro lógico seguinte (20/03/2004).

Exemplo:

Código: Selecionar todos

SET SOFTSEEK ON
SEEK dData        //dData = CTOD("05/02/2004")
SET SOFTSEEK OFF
Ai é só dar um SKIP -1 e retornar ao registro anterior (15/01/2004).

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Complementando a postagem do Toledo.

Se você preferir pode usar a função DBSEEK() ao invés do comando SEEK, neste caso não é necessário usar os comandos SET SOFTSEEK, bastando somente especificar a busca relativa na própria função, exemplo :

DBSEEK(MDATA,.T.)
// Faz a busca posicionando no superior mais próximo caso não seja encontrado um registro com chave idêntica.

DBSEEK(MDATA,.F.)
// Faz a busca retornando EOF()=.T. caso não seja encontrado um registro com chave idêntica.

EOF() = Fim de arquivo

Até logo.

Marcelo
Responder