Pesquisa em clipper

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Emanuel R. V. Santos
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 26 Dez 2009 13:08
Localização: JAU SP

Pesquisa em clipper

Mensagem 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.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Pesquisa em clipper

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Pesquisa em clipper

Mensagem 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
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.
Emanuel R. V. Santos
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 26 Dez 2009 13:08
Localização: JAU SP

Re: Pesquisa em clipper

Mensagem 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.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Pesquisa em clipper

Mensagem 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,
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
Emanuel R. V. Santos
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 26 Dez 2009 13:08
Localização: JAU SP

Re: Pesquisa em clipper

Mensagem por Emanuel R. V. Santos »

Perfeito, muito obrigado a todos. OBRIGADÁAÁÁÁSSSSOOOOO. :{
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Re: Pesquisa em clipper

Mensagem 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.
Anexos
procura.txt
(1.24 KiB) Baixado 293 vezes
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Responder