Pesquisa
Moderador: Moderadores
-
PITERGALDIANO
- Usuário Nível 2

- Mensagens: 91
- Registrado em: 28 Nov 2003 08:48
Pesquisa
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
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
Programador Clipper
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 !!
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

- Mensagens: 91
- Registrado em: 28 Nov 2003 08:48
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
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!
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.
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.
- juniorcamilo
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 10 Nov 2006 09:12
- Localização: Pará
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
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)
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)
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
A resposta do Zoc também vai funcionar!
Abraços
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
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
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Hehehe
Ói o home aí gente. Tava achando que o Toledo tinha ido pros states.
Ó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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
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.
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}
{POG - Programação Orientada a Gambiarra}

