Histórico da Página
Sintaxe
MsSeek(<expressão caracter>, <expressão lógica 1>, [ <expressão lógica 2> ] )
Propósito
Pesquisa a área de trabalho ativa para encontrar um determinado registro, de acordo com a chave de pesquisa utilizada.
Argumentos
<expressão caracter>
São os dados do registro que se deseja localizar, de acordo com a ordem de busca previamente especificada pela função dbSetOrder(). Ou seja, de acordo com o índice ativo no momento para a área de trabalho.
<expressão lógica 1>
Define se o cursor ficará posicionado no próximo registro válido, em relação à chave de pesquisa especificada, ou no final do arquivo, caso não se encontre a exata informação da chave de pesquisa. O padrão utilizado é falso (.F.), indicando que a busca será aproximada.
Nesse caso, a pesquisa será considerada um sucesso quando encontrar uma parte da informação.
<expressão lógica 2>
Define se o cursor será posicionado no primeiro ou no último registro de um intervalo com as mesmas informações especificadas na chave de pesquisa. O padrão utilizado é falso (.F.), indicando que o cursor será posicionado no primeiro registro encontrado.
Utilização
A função MsSeek possui as mesmas funcionalidades da função dbSeek(), com a vantagem de não necessitar acessar novamente a base de dados para localizar uma informação já utilizada pela conexão (thread) ativa.
Desta forma, a thread mantém em memória os dados necessários para reposicionar os registros já localizados, de forma que a aplicação pode, simplesmente, posicionar o registro sem executar novamente a pesquisa.
A diferença entre as funções dbSeek() e MsSeek() é notada em aplicações com grande volume de posicionamentos e pesquisas, como relatórios, por exemplo, que necessitam referenciar diversas vezes o mesmo registro durante uma execução.
Exemplos
Segue abaixo o exemplo de uma pesquisa exata. Ou seja, a pesquisa será considerada um sucesso somente se toda a chave de pesquisa for encontrada.
dbSelectArea(“SA1”)
// De acordo com o arquivo SIX, a chave de pesquisa é A1_FILIAL + A1_COD + A1_LOJA
dbSetOrder(1)
IF MsSeek(“01” + “000001” + “02”) // Filial: 01 / Código: 000001 / Loja: 02
MsgInfo(“Cliente localizado”, “Consulta por cliente”)
ELSE
MsgInfo(“Cliente não encontrado”, “Consulta por cliente”)
ENDIF
No exemplo abaixo, verificaremos uma pesquisa aproximada. Ou seja, a pesquisa será considerada um sucesso caso uma parte da chave de pesquisa seja encontrada.
dbSelectArea(“SA1”)
// De acordo com o arquivo SIX, a chave de pesquisa é A1_FILIAL + A1_COD + A1_LOJA
dbSetOrder(1)
IF MsSeek(“01” + “000001” + “02”, .T.) // Filial: 01 / Código: 000001 / Loja: 02
MsgInfo(“Cliente localizado”, “Consulta por cliente”)
ELSE
MsgInfo(“Cliente não encontrado”, “Consulta por cliente”)
ENDIF
La función MsSeek(), cuando se utiliza bien, puede disminuir mucho el I/O de disco cuando se ejecuta.
Su principal característica es realizar el cache del resultado del seek, tanto con relación al recno encontrado como con relación al contenido del registro.
El uso incorrecto del MsSeek puede crear una situación de lectura sucia no deseada.
<enlace para el tópico de lectura sucia>