DBSeek
Busca um registro numa tabela usando o indice atual. Sempre defina DBSetOrder() antes — a ordem 1 nem sempre e a que voce quer.
Assinatura: DBSeek(cChave, lSoft) -> lAchou
Retorna: Logical
DBSeek e a forma mais rapida de localizar registros em Protheus porque usa o indice (ao contrario de DBSelectArea + filtro). Precisa de duas coisas: alias selecionada e ordem definida.
Sintaxe
DBSelectArea("SA1")
DBSetOrder(1) // qual indice usar (1 = primeira chave)
lAchou := DBSeek(cChave) // .T. se achou, .F. caso contrarioExemplo
DBSelectArea("SA1")
SA1->(DBSetOrder(1)) // indice por filial+codigo
If SA1->(DBSeek(xFilial("SA1") + cCodigoCliente))
cNome := SA1->A1_NOME
Else
cNome := "Cliente nao encontrado"
EndIf
// Padrao com Posicione (atalho que ja faz DBSeek):
cNome := Posicione("SA1", 1, xFilial("SA1") + cCod, "A1_NOME")Pegadinhas
- Sempre
DBSetOrder()antes — a ordem 1 nao e sempre a chave principal (varia por tabela) - xFilial obrigatorio — esquecer faz buscar em qualquer filial. Use
xFilial("SA1") - Dimensionar a chave — pra string, use
PadR(cCod, TamSx3("A1_COD")[1]) - Segundo param (lSoft): .T. = se nao achou exato, posiciona no proximo maior. Use com cuidado.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cChave | Character | sim | Chave concatenada conforme o indice |
lSoft | Logical | não | Default .F. (busca exata) |
Exemplos
Buscar cliente
SA1->(DBSetOrder(1))
If SA1->(DBSeek(xFilial("SA1") + cCod))
cNome := SA1->A1_NOME
EndIf