Histórico da Página
Composition Setup |
---|
import.css=/download/attachments/3279126062824/newLayouttecnologia.css |
|
Pagetitle |
---|
...
|
...
...
...
|
Localiza
...
um
...
registro
...
com
...
determinado
...
valor
...
da
...
expressão
...
de
...
chave
...
de
...
índice.
Sintaxe
Bloco de código | ||
---|---|---|
| ||
DBSeek( <xExp> xExp >, [ lSoftSeek ], [lUltimo lLast ] )--> lRet
|
Parâmetros
...
Nome | Tipo | Descrição | Obrigatório | Referência |
---|---|---|---|---|
xExp |
...
qualquer | Indica o valor da chave que será encontrada do tipo caracter |
...
. | X |
...
lSoftSeek |
...
lógico | Indica se, verdadeiro (.T.), posiciona no primeiro registro com expressão de chave maior que o valor procurado; caso contrário, falso (.F.) (Valor padrão). |
...
lLast | lógico | Parâmetro de compatibilidade. Deve ser informado o valor nulo ( NIL ). |
Retorno
Nome | Tipo | Descrição |
---|---|---|
lRet | lógico |
...
...
Retorna verdadeiro (.T.), se encontrar um registro com o valor especificado; caso contrário, falso (.F.). |
Observações
- xExp Todos os tipos de expressão do índice com exceção do índice com apenas um campo do tipo numérico.
- Antes de chamar a função DBSeek(), deve-se certificar de que existe uma ordem ativa no momento com os campos que se deseja pesquisar o valor. Se a expressão possuir apenas um campo numérico, o primeiro parâmetro <xExp> deve ser do tipo numérico, mas nos demais casos deve-se utilizar um valor do tipo caracter para este parâmetro (mesmo que sejam apenas dois campos numéricos ou do tipo data).
- Quando o segundo parâmetro <lSoftSeek> for especificado como verdadeiro (.T.), mesmo que a expressão pesquisada não encontrar nenhum registro com este valor, a tabela será posicionada no próximo valor maior que o especificado no primeiro parâmetro <xExp>, mas mesmo posicionando no próximo valor essa função retornará falso (.F.) (pois não encontrou).
Quando não for especificado este valor ou estiver configurado falso (.F.) e falhar o valor da pesquisa, a tabela será posicionada em LastRec +1 e será setada a flag de EOF. - Se o terceiro parâmetro
...
- <lLast> for especificado com valor verdadeiro (.T.), a função posiciona a tabela no último registro com o valor, ou falso (.F.), será posicionada na primeira ocorrência.
- Se o registro for encontrado o current record será atualizado.
- Se o retorno do DBSeek for False (.F.) a flag de EOF() será definida como True (.T.) e o RECNO() será inválido.
Exemplos
O exemplo abaixo utiliza a RDD "TOPCONN", mas a função pode ser utilizada com qualquer uma das RDDs válidas.
Exemplo 1
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
//Este exemplo , apresenta comooutilizar usoa dafunção DBSeek () para buscalocalizarde umvalores numéricos. USE Clientes NEWORDListADD ("/teste/ind1.cdx") // Expressão é Num (campo numérico) DBSeek(100) // Retorna: .F. EOF() // Retorna: .T. DBSeek(100,.T.) // Retorna: .F. EOF() // Retorna: .F. (pois o softseek posicionou no próximo registro) //Este exemplo, apresenta como utilizar a função DBSeek() para percorrer todos os registros //de Clientes com o nome João e vencimentos a partir de Janeiro de 2001. USE Clientes NEWORDListADD ("/teste/ind2.cdx") // Expressão é Nome+Venc (campo caracter + data) DBSEEK("joao200101",.T.) // Procura a primeira ocorrência de Nome "joao" e vencimento maior que Janeiro de 2001 WHILE !EOF() .AND. Nome == "joao" DBSkip() ENDDO Advanced Protheus 6.09 , Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server registro caractere
user function test
local cRdd := 'TOPCONN'
local cTable := 'MYTABLE'
local aStru := {{"CPOC","C",10,0}}
local nHdl := tcLink()
dbCreate(cTable, aStru, cRdd)
dbUseArea(.T., cRdd, cTable, (cTable), .F., .F. )
dbCreateIndex('MYINDEX', 'CPOC')
for i := 0 to 6
dbAppend(.F.)
(cTable)->CPOC := chr(65+i) //Insere caracteres de A à F
dbCommit()
next
dbGoTop()
conout( dbSeek("C") ) // deve retornar .T. e reposicionar no recno() 3
dbCloseArea()
tcUnlink(nHdl)
return
|
Exemplo 2
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
//Este exemplo apresenta o uso da DBSeek para localizar um registro numérico
user function test
local cRdd := 'TOPCONN'
local cTable := 'MYTABLE'
local aStru := {{"CPON","N",10,0}}
local nHdl := tcLink()
dbCreate(cTable, aStru, cRdd)
dbUseArea(.T., cRdd, cTable, (cTable), .F., .F. )
dbCreateIndex('MYINDEX', 'CPON')
for i := 1 to 15 step 2
dbAppend(.F.)
(cTable)->CPON := i
dbCommit()
next
dbGoTop()
conout( dbSeek(10, .T. ) ) // deve retornar .F. e reposicionar no recno() 6 respeitando o comportamento da lSoftSeek
conOut( recno() )
dbCloseArea()
tcUnlink(nHdl)
return
|