Página 1 de 1

pesquisa

Enviado: 12 Jan 2005 22:38
por Flavio
Tenho uma tabela com código, descrição, preço
Preciso fazer uma pesquisa por descrição que se o usuário digitar a 1ª palavra e a 3ª ou a 2ª e a 4ª e assim por diante o sistema mostre os dados. Por exemplo: PARAFUSO DE ROSCA DO FUSCA
Se o usuário digitar PARAFUSO DO FUSCA o sistema filtra.

Enviado: 13 Jan 2005 01:25
por Dudu_XBase
Boa Noite !
Acesse o link abaixo que corresponde a seção de downloads do saite


https://pctoledo.org/col_dow.htm

Selecione a url "Funções com Fontes"

Procure a função de nro 046 - Pesquisa Letra a Letra

Faça o Download e faça seus testes.

ou entre diretamente na página de download desta rotina aqui mesmo no fórum, o endereço é...

https://pctoledo.org/forum/dload. ... file_id=63

Re: pesquisa

Enviado: 13 Jan 2005 01:26
por Maligno
Flavio escreveu:Por exemplo: PARAFUSO DE ROSCA DO FUSCA
Se o usuário digitar PARAFUSO DO FUSCA o sistema filtra.
Se você usa a LIB SIX, será relativamente fácil você montar um esquema de filtragem (eu não disse pesquisa) com a função sx_WildSeek(), que serve exatamente para busca de palavras em qualquer posição da string, na chave selecionada. Se não usa a SIX, considere a possibilidade de utilizá-la. É um sistema de índice muito melhor que o NTX nativo do Clipper.
Para maiores informações, faça uma busca nas threads passadas neste mesmo fórum. Você encontrará muita coisa a respeito.

[]'s
Maligno
http://www.buzinello.com/prg

Enviado: 13 Jan 2005 10:04
por Clipper
Prezado Colega

Acho que também não será possivel o uso da função SX_Wildseek() porque ela faz uma busca por uma determida string dentro de um campo, porém ela não faz isso da forma que você quer, já que você quer mais de uma string no mesmo campo. Neste seu caso uma solução seria com o uso da Sx_wildseek() ou do comando LOCATE mas usando de outra forma. Seria + ou - assim :

Código: Selecionar todos

WSTRING1:= WSTRING2:= WSTRING3:= WSTRING4:= WSTRING5:=SPACE(20)

@ 01,00 SAY "Sequencia a pesquisar 1 -> " GET STRING1 PICT "@!"
@ 02,00 SAY "Sequencia a pesquisar 2 -> " GET STRING1 PICT "@!"
@ 03,00 SAY "Sequencia a pesquisar 3 -> " GET STRING1 PICT "@!"
@ 04,00 SAY "Sequencia a pesquisar 4 -> " GET STRING1 PICT "@!"
@ 04,00 SAY "Sequencia a pesquisar 5 -> " GET STRING1 PICT "@!"
READ

// Neste caso utilize vários GETs para facilitar o entendimento, mas poderá ser usado apenas 1, porém ele exigirá um tratamento para a retirada de cada string separadamente

WSTR1:=ALLTRIM(STRING1)
WSTR2:=ALLTRIM(STRING2)
WSTR3:=ALLTRIM(STRING3)
WSTR4:=ALLTRIM(STRING4)
WSTR5:=ALLTRIM(STRING5)

// Supondo que o nome do campo seja DESCRI

LOCATE FOR WSTR1$DESCRI .AND. WSTR2$DESCRI .AND. WSTR3$DESCRI .AND. WSTR4$DESCRI .AND. WSTR5$DESCRI
IF .NOT. EOF()
    @ 24,00 SAY "Encontrado : "+DESCRI    
    // Aqui você deverá criar uma rotinazinha para continuar procurando utilizando o comando CONTINUE
ELSE
    @ 24,00 SAY "Nao encontrado..."
ENDIF
Creio que a mesma idéia poderá ser usada utilizando a função SX_WILDSCREEN()

Até logo.

Marcelo

Enviado: 13 Jan 2005 15:05
por Antonio
Colegas,

Esse problema não poderia ser resolvido de forma simples, com o uso do operador "$" ?

Enviado: 13 Jan 2005 15:54
por Clipper
Eu acho que o pessoal não prestou atenção no que o colega quer, não é uma simples busca, vejamos :

O usuário digita "MARCELO DE OLIVEIRA"

Então o sistema deveria achar todos "MARCELO DE OLIVEIRA". Exemplos de nomes que seriam inclusos neste filtro :

MARCELO MENDES DE OLIVEIRA
MARCELO DE OLIVEIRA
JOAO MARCELO OLIVEIRA DE ANDRADE
MARCELO DE JESUS ANDRADE BASTOS FIGUEIROA OLIVEIRA
OLIVEIRA CICRANO BELTRANO CAPISTRANO DE MÃE JOANA MARCELO

Sendo assim a busca tem que ser feita através de uma rotina ou da forma como mencionei na postagem anterior, na verdade eu nem testei se funciona mas acho que sim.

Até logo.

Marcelo

Enviado: 13 Jan 2005 16:37
por Clipper
Pronto

Criei um exemplo bem simples mas que faz exatamente o que o colega quer, com um pouco de criatividade dá para fazer de um modo mais profissional, a idéia é a mesma.

Quando executarem o exemplo digitem na busca em Sring 1 "JOSE" em String 2 "DA" e vejam o resultado.

www.zitinformatica.com/clipper/busca.zip

Até logo.

Marcelo

Enviado: 13 Jan 2005 20:24
por Toledo
Flávio,

Fiz algumas alterações na função de pesquisa letra a letra e coloquei um filtro utilizando a lib SUBNTX, conforme você vai digitando as letras, esta rotina vai filtrando os registros.

Se você usa arquivos NTX no seu programa, acho que esta rotina vai resolver o seu problema.

Pegue a rotina no link abaixo e depois use o arquivo COMPILA.BAT para compilar o programa exemplo.

https://pctoledo.org/forum/dload. ... ile_id=128

Para fazer um teste, compile o exemplo e digite no campo da pesquisa a palavra ROBERTO CAR e veja o resultado.

Abraços,