Página 1 de 1

Pesquisa em clipper

Enviado: 26 Dez 2009 13:17
por Emanuel R. V. Santos
Boa tarde, sou novo por aqui e venho solicitar a informação de como fazer uma pesquisa em meu banco de dados procurando por partes do nome pois consigo somente se iniciar com nome Ex. Emanuel ... tenho que começar com Em... pois se busco por "nuel" ele nao encontra o nome Emanuel. segue abaixo como montei essa pesquisa HELP-ME PLISS !!!!

Código: Selecionar todos

 set color to g----
      use CADCLI alias CLI new
      index on C to ICLIENTE
      cnome:= Space(30)
      set scoreboard off
      @  4,  4 say "PARA CONSULTAR O NOME DO CLIENTE"
      @  6, 10 say "DIGITE O NOME" get cNOME picture "@!" send ;
         colordisp("W/B+")
      read
      if (LastKey() == K_ESC)
         dbCloseAll(0)
         return
      endif
      set filter to cNOME = SUBSTR(C,1, LEN(ALLTRIM(cNOME)))
      goto top
      do while (.T.)
         set scoreboard off
         @ 12,  5 to 23, 71 double
         dbedit(11, 6, 22, 70, Nil)
         if (LastKey() == K_ESC)
            clear screen
            exit
         endif
         if (LastKey() == K_ENTER)
            ncodcli:= cli->co
            ccli:= cli->c
            clear screen
            exit
         endif
         clear screen
      enddo
      set filter to
      ccli:= cli->c
      ncodcli:= cli->co


---
Nota da Moderação (Maligno):
A presente mensagem foi editada para a inclusão das tags de indentação, a fim de facilitar a leitura do código fonte. Um código indentado já é difícil de ler, mesmo quando pequeno. Sem a devida indentação, não só a leitura piora, como também cria-se um desestímulo nos colegas que poderiam ajudar. O maior prejudicado, claro, será você mesmo. Portanto, futuramente, utilize essas tags, que estão disponíveis para uso automático na caixa de composição da mensagem. Note que isso não é uma opção, mas obrigação. Se vier a postar novamente código sem indentação, a moderação terá de editar sua mensagem novamente.

Re: Pesquisa em clipper

Enviado: 26 Dez 2009 13:45
por Maligno
Olá.
Seja bem-vindo ao fórum. :)

Pelo Clipper, nativamente, só se for utilizado um filtro, o que poderia levar a um resultado não muito agradável, pois se for um grande volume de dados, será sentida uma considerável lentidão.
Mas se for utilizada a biblioteca SIX (índices compostos e compactados), pode-se aproveitar a função sx_WildSeek(), desta biblioteca, que foi feita exatamente para atender necessidades como a sua. Essa biblioteca, e essa função, já foi discutida inúmeras vezes no passado. Utilize a busca do fórum e verá que diversos tópicos serão mostrados.

Re: Pesquisa em clipper

Enviado: 27 Dez 2009 22:49
por rochinha
Amiguinho,

Para filtar conteúdo dentro de outro conteúdo usamos o $, assim:

SET FILTER TO "nuel" $ CLIENTES->NOME

Como voce usa NTX acho que a pedida é integrar SUBNTX a sua compilação e passar a obter resultados surpreendentes em filtragens.

Diferentemente do SET FILTER a função SUBNTX devolverá para voce um arquivo de INDICE baseado indice original de seu arquivo contendo somente os registros pertencentes a sua filtragem.

O funcionamento é quase Identico ao INDEX ON ... FOR/WHILE.

Exemplo:

USE clientes
INDEX ON nome TO tempo001 WHILE "nuel" $ nome

Com este codigo voce obterá um pequeno indice temporário com os registros que tenham NUEL no NOME.

Mas o tempo para isto pode ser a eternidade, sendo que com SUBNTX voce obterá isto em pouquissimos segundos.

Caso seu Clipper seja o 5.2 voce poderá agregar a ele a biblioteca SIX 2 e obter resultados fascinantes com suas funções.

Caso seu Clipper seja 5.3 estas funções já estão nele e inclusive a função SCOPE que faz o mesmo que a SUBNTX.

Salvo enganos acho que voce tem grande possibilidades de obtenção de bons resultados em filtragens.

Caso necessite da SUBNTX me envie um email para irochinha@itelefonica.com.br

Re: Pesquisa em clipper

Enviado: 28 Dez 2009 17:36
por Emanuel R. V. Santos
Obrigado Amiguinho pela dica, mas acontece que quando incluo o cifrão ele só procura o ultimo nome do registro e mesmo assim se o nome for digitado inteiro por parte dele ele nao procura tens alguma sugestao, quanto a SUBNTX se puder me mandar agradeço emanuelsantos_1978@hotmail.com.

Obrigadão.

Re: Pesquisa em clipper

Enviado: 29 Dez 2009 08:15
por Toledo
Emanuel, segue abaixo o link para você copiar a SUBNTX da seção Download do meu site:

https://pctoledo.org/download/subntx2.zip
Emanuel R. V. Santos escreveu:mas acontece que quando incluo o cifrão ele só procura o ultimo nome do registro
Caso você esteja usando alguma variável com a parte do nome para filtro, você tem que tirar os espaços em branco, use a função ALLTRIM().

Código: Selecionar todos

SET FILTER TO ALLTRIM(cNome) $ CLIENTES->NOME

ou

INDEX ON nome TO tempo001 WHILE ALLTRIM(cNome) $ nome
Abraços,

Re: Pesquisa em clipper

Enviado: 29 Dez 2009 09:08
por Emanuel R. V. Santos
Perfeito, muito obrigado a todos. OBRIGADÁAÁÁÁSSSSOOOOO. :{

Re: Pesquisa em clipper

Enviado: 29 Dez 2009 18:40
por billy1943
Em meus sistemas eu utilizo uma rotina, que ao se pesquisar um nome de cliente, um asterísco (*) na frente do valor de pesquisa, ele retorna todos os códigos e nomes de clientes que atendam aquela pesquisa.
Exemplo:
- se eu digitar: *SILVA
- o retorno será o código e nome de todos os clientes que tenham SILVA no nome, não importando sua localização, se no início, meio ou fim;

A rotina está em anexo, devendo ser adaptada, vale somente a sua idéia.