Criando uma consulta

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Capitão Caverna
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 04 Mai 2007 14:56
Localização: Sinop

Criando uma consulta

Mensagem por Capitão Caverna »

Pessoal ja vi alguns topicos aqui no forum, mas axo que devido meu pouco conhecimento nao consegui trazer para minha realidade.,
Tenho uma tabela chamada Cliente e tenho um campo nela chamado nome_clie que é a order 1 da minha tabela.
Gostaria de Saber qual comando usar para que o programa me retornasse apenas o clientes quem contenham a palavra xavier, o banco de dados tem os seguintes registros;

Joao da Silva Xavier
Pedro Xavier Theodoro
Arlindo Campos
Mauricio Moraes
Xavier Pinto
Campos Oliveira

Sera que alguem pode me ajudar ??
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem por Augusto »

Código: Selecionar todos

use cliente
do while .not. eof()
   if AT("xavier",nome_clie) <> 0
      ? nome_clie
   endif
   skip
enddo
Função AT( ) - Pesquisa sub-cadeia (substring):

Forma: AT(<expressão caracter1>,<expressão caracter2>)
Propósito:
Retorna um número que representa a posição inicial de uma expressão caracter dentro de uma segunda expressão, se a primeira estiver nela contida e retorna 0(zero) se aprimeira não estiver contida na segunda.
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Mas se for assim, é melhor usar um filtro:

Código: Selecionar todos

SET FILTER TO AT("XAVIER",Upper(nome_clie)) > 0
go top
while !EoF()
   ? nome_clie
   CONTINUE
end
SET FILTER TO // desliga o filtro
A função UPPER() garante que nenhum nome será excluído por estar em maiúsculas e/ou minúsculas.
Agora, dependendo do volume de dados, ficará lento de qualquer maneira, seja pelo FILTER ou pelo método de busca um-a-um.
O ideal seria algo como a função sx_WildSeek() da SIX. Com essa função, mesmo com grande volume de dados, a busca é muito rápida.
Se o OP não conhece, é só pesquisar no fórum. Há várias mensagens sobre esta LIB.
[]'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
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem por Augusto »

Bastante oportuna sua observação Maligno... obrigado... confesso que me lembrei do LOWER na hora que estava escrevendo o post mais acabei me esquecendo... (é a velhice - hehe) Portando ... lá vai...

Código: Selecionar todos

use cliente 
do while .not. eof() 
   if AT("xavier",LOWER(nome_clie)) <> 0 
      ? nome_clie 
   endif 
   skip 
enddo
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Capitão Caverna
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 04 Mai 2007 14:56
Localização: Sinop

Valeu Galera ...

Mensagem por Capitão Caverna »

Obrigado pelas dicas vou tentar uma por uma, se for possivel gostaria de saber se vcs tem algum exemplo pra me mostrar do sx_WildSeek(). como funciona certinho.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Exemplo do sx_WildSeek

Mensagem por Maligno »

Retirado do NG:

Código: Selecionar todos

Sx_WildSeek():

Syntax:  Sx_WildSeek( <cSearchStr>, [<lCont>] )

         cSearchStr = The wildcard string to base the search on.
         lCont      = .T. searches from the current record pointer, .F.
                      searches from the top of the DBF (Default).

Returns:  .T. if match is found (also sets found() to .T.), .F. if not
          (also sets found() to .F.).

Description:  Performs a wildcard SEEK on the currently selected tag or
              index.

  NOTE:  This function is NOT supported under SIXNTX.

Examples:

    // To find the first Smith or Smyth
    Sx_WildSeek( "Sm?th" )            // Begin search from Bof()
    Sx_WildSeek( "Sm?th", .T. )       // Begin Search from current recno()

    // To find the first Johnson, Johnston, Johannson, Josephson, etc...)
    Sx_WildSeek( "Jo*son" )
[]'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!
Responder