Pesquisa

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

PITERGALDIANO
Usuário Nível 2
Usuário Nível 2
Mensagens: 91
Registrado em: 28 Nov 2003 08:48

Pesquisa

Mensagem 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
Piter Galdiano
Programador Clipper
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem 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 !!
C:\Xharbour\Xdev\Fw\VSX
PITERGALDIANO
Usuário Nível 2
Usuário Nível 2
Mensagens: 91
Registrado em: 28 Nov 2003 08:48

Mensagem por PITERGALDIANO »

Pode ter um documento com números igual e série igual, desde que o cliente seja outro.

Entendeu?
Piter Galdiano
Programador Clipper
Avatar do usuário
Zoc
Usuário Nível 1
Usuário Nível 1
Mensagens: 20
Registrado em: 24 Set 2004 13:08
Localização: Leme/SP

Mensagem por Zoc »

tente

dbseek( trim( doc ))
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem 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!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
juniorcamilo
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 10 Nov 2006 09:12
Localização: Pará

eu uso

Mensagem por juniorcamilo »

dbseek(documento,.t.)
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem por Toledo »

A resposta do Zoc também vai funcionar!

Abraços
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Hehehe

Ói o home aí gente. Tava achando que o Toledo tinha ido pros states.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Responder