Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Problemas com importação automática

Sintaxe

 

DbSeek(<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 permite posicionar o cursor da área de trabalho ativa no registro que corresponda às informações especificadas na chave de pesquisa. A função retorna um valor lógico indicando se a chave de pesquisa foi encontrada ou não. Caso retorne verdadeiro (.T.), a pesquisa obteve sucesso. Caso contrário, retorna falso (.F.).

 

Dicas

 

A função MsSeek() tem o mesmo objetivo da função dbSeek(). A vantagem da função MsSeek() é que ela não necessita acessar novamente a base de dados para localizar uma informação já utilizada pela conexão (thread) ativa.

 

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 dbSeek(“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 dbSeek(“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

 

 Al ejecutar un DbSeek() verifique siempre si se localizó el registro, por ejemplo:
// DbSeekSample.prw
If SB1->(DbSeek(XFilial("SB1") + cVar))
// Encontré el registro, por lo tanto hago lo que es necesario.
Else
// Genero el retorno negativo de la ejecución del procesamiento.
EndIf
Aunque sea obvia la existencia del registro, haga la prueba para evitar cualquier interrupción indeseada del programa o que se corrompa la integridad de los datos.
La no verificación de la marcación, en gran parte de los casos, no genera error o ningún problema aparente. La principal consecuencia de la no verificación es el uso de información equivocada. Por ejemplo, suponiendo que la rutina esté calculando un contador cualquiera, si no se confirma que el DbSeek encontró el registro correcto, de todas formas se realizará el cálculo, sin embargo, el resultado del cálculo estará equivocado, pues se utilizó información equivocada. Errores de integridad de este tipo son muy difíciles de encontrar y generalmente sólo ocurren en un determinado escenario y ese escenario generalmente no está en la máquina del programador o analista que está verificando la situación.