Página 1 de 1
Criando uma consulta
Enviado: 11 Jun 2007 19:38
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 ??
Enviado: 11 Jun 2007 20:01
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.
Enviado: 11 Jun 2007 20:08
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.
Enviado: 11 Jun 2007 20:19
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
Valeu Galera ...
Enviado: 13 Jun 2007 17:35
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.
Exemplo do sx_WildSeek
Enviado: 13 Jun 2007 18:09
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" )