Página 1 de 1
Pesquisa
Enviado: 28 Dez 2006 14:19
por PITERGALDIANO
Pessoal...
preciso fazer a seguinte pesquisa:
Os filtros são:
Documento
Serie
Faço assim:
meu índice: Index on Doc+Serie To ind1
A pesquisa: DbSeek(doc+serie)
até ai tudo bem.. mas como faço se informar apenas o documento?
o campo série vai ficar em branco, ai o sistema tenta buscar o documento com o campo série em branco e não acha.
Gostaria que buscasse o primeiro documento independente do número de série ter sido informado ou não.
Pode ser inverso também.... informar somente a série.
Como faço?
Obrigado
Enviado: 28 Dez 2006 14:45
por ederxc
cara to tentando responder pra vc mas ta meio confuso .....
explica ae uma coisa ...
neste seu cadastro de documentos .. havera numero de documento iguais .... C ñ hover , ñ a nessecidade de vc indexar por serie tbm ! a ñ ser que o usuario por exemplo esqueça o numero mas lembre a série ... ae sim entendo o seu questionamento !!
da uma salientada ae em sua duvida !!
Enviado: 28 Dez 2006 16:25
por PITERGALDIANO
Pode ter um documento com números igual e série igual, desde que o cliente seja outro.
Entendeu?
Enviado: 28 Dez 2006 18:13
por Zoc
tente
dbseek( trim( doc ))
Enviado: 29 Dez 2006 00:47
por Stanis Luksys
Olá amigo,
Você pode colocar set softseek on antes da pesquisa para que ela encontre mesmo apenas pelo começo da string no indice.
Note que (pelo que entendi) você procurando apenas pelo DOC pode retornar mais de um resultado.
Neste caso eu faria esta pesquisa com softseek on dentro de um loop ! eof(), e jogaria todos num TBrowse, aí o cara vai lá e da um enter no registro que ele procura.
Falou mano!
eu uso
Enviado: 29 Dez 2006 21:45
por juniorcamilo
dbseek(documento,.t.)
Enviado: 30 Dez 2006 05:54
por Clipper
Só complementando...
As respostas do Junior e do Stanis estão corretissimas, se você usa a função DBSEEK() então a do Junior é melhor, pois o parâmetro .T. informa que será habilitada a busca por aproximação SOFTSEEK, se você usa o comando SEEK então terá de usar a opção do Stanis, lembrando que após o SET SOFTSEEK ON e do SEEK é conveniente usar SET SOFTSEEK OFF, já ná função não há a necessidade de "Ligar" e "Desligar" o SOFTSEEK, pois o tipo de busca está especificado no parâmetro.
Ps. Na função DBSEEK() se o parâmetro SOFTSEEK não for informado por default é considerado .F.
Até logo.
Marcelo
Enviado: 30 Dez 2006 11:53
por Toledo
A resposta do Zoc também vai funcionar!
Abraços
Enviado: 30 Dez 2006 12:44
por rochinha
Hehehe
Ói o home aí gente. Tava achando que o Toledo tinha ido pros states.
Enviado: 03 Jan 2007 13:03
por gvc
O seek/dbseek permite vc pesquisar por parte da chave de indexação. Sempre pelo inicio.
No seu caso, basta colocar o número do documento sem o número de série. Mas lembre-se que não deve haver espaços em brancos no final da chave. Eles serão usados na pesquisa.
No seu caso:
chave1 := doc + alltrim(serie)
dbseek(chave1)
// pesquisa pelo número do documento e pela série. Se série estiver em branco, será removida da chave para pesquisa.
chave1 := left(doc, 3)
dbseek(chave1)
// pesquisa pelos primeiros 3 caracteres do documento.
O softseek faz com que o seek/dbseek quando não encontrar um registro com a chave igual ao que vc passou, não move o ponteiro para o final do arquivo. Ele para no registro seguinte ao que "deveria" encontrar.
Ex.
Seu arquivo tem:
JOAQUIM AAA
JOAQUIM AAB
JOAQUIM AAD
JOAQUIM AAE
dbseek("JOAQUIM AAC") // EOF() = .T. FOUND() = .F.
// Para o ponteiro de arquivo no final do arquivo.
dbseek("JOAQUIM AAC", .T.) // EOF() = .F. FOUND() = .F.
// Para o ponteiro de arquivo em JOAQUIM AAD.
dbseek("JOAQUIM") // EOF() = .F. FOUND() = .T.
// Para o ponteiro de arquivo em JOAQUIM AAA. (Primeira ocorrencia da chave de pesquisa.)
Para pesquisar somente pela série, vc terá que criar um novo índice e quando for pesquisar no dbf, mudar a ordem do arquivo para esse índice.
Boa sorte. Espero ter ajudado.