pesquisa com locate ou outro
Moderador: Moderadores
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
pesquisa com locate ou outro
num determinado dbf tenho um registro de titulo "nome", onde os campos sao preenchidos com nomes de pessoas. assim, por exemplo, num cadastro eu coloco no campo nome o meu nome: glauco cruz costa. ok
só que eu gostaria de poder pesquisar os esse nome, por exemplo, eu só sabendo que tem um glauco no meu dbf, mas sem saber onde, e qerer ver os dados dele.
assim, por exemplo, colocando o comando locate for nome = non, sendo nom a variavel em q eu atribuo o nome glauco para pesquisar.
só que assim ele nao acha meu nome no dbf. ele só acha se eu digitar na variavel o nome inteiro.
há alguma forma simples de eu pesquisar somente uma parte da expressao e achar?
obrigado.
só que eu gostaria de poder pesquisar os esse nome, por exemplo, eu só sabendo que tem um glauco no meu dbf, mas sem saber onde, e qerer ver os dados dele.
assim, por exemplo, colocando o comando locate for nome = non, sendo nom a variavel em q eu atribuo o nome glauco para pesquisar.
só que assim ele nao acha meu nome no dbf. ele só acha se eu digitar na variavel o nome inteiro.
há alguma forma simples de eu pesquisar somente uma parte da expressao e achar?
obrigado.
Re: pesquisa com locate ou outro
Não sei se entendi direito, mas a sugestão seria:
Primeiro crie um indice para o campo NOME
vArNome := SPACE(50)
@ 01,01 GET vArNome
READ
SEEK RTRIM(vArNome )
Se vc digitou ´GLAU´ele ira achar.
Abs,
Primeiro crie um indice para o campo NOME
vArNome := SPACE(50)
@ 01,01 GET vArNome
READ
SEEK RTRIM(vArNome )
Se vc digitou ´GLAU´ele ira achar.
Abs,
mixsistemas@gmail.com
Re: pesquisa com locate ou outro
Prezado Glauco
O exemplo do Rbonotto está perfeito !
Outra forma que talvez você possa precisar no futuro é a pesquisa de parte de um nome, sem saber em que posição ele está.
Lá vai um exemplo :
Nesse pequeno exemplo a busca será pelo nome onde quer que ele esteja no registro (inicio, meio ou fim)
No exemplo o sistema acharia qualquer uma das pesquisas abaixo :
GLAUCO
CRUZ
CRUZ COSTA
GLAUCO CRUZ
COSTA
CO CRUZ CO
Até logo.
Marcelo
O exemplo do Rbonotto está perfeito !
Outra forma que talvez você possa precisar no futuro é a pesquisa de parte de um nome, sem saber em que posição ele está.
Lá vai um exemplo :
Código: Selecionar todos
MNOME=SPACE(30)
@ 01,00 say "Pesquisar -> " GET MNOME PICT "@!"
READ
DBGOTOP()
LOCATE FOR ALLTRIM(MNOME)$NOME
IF EOF()
@ 24,00 SAY "Nao encontrado..."
INKEY(3)
RETURN(.F.)
ENDIF
CONTA=0
DO WHIL .T.
CONTA++
@ 03,00 CLEAR TO 04,79
@ 03,00 SAY CODIGO
@ 04,10 SAY NOME
@ 24,00 SAY "Pressione uma tecla para procurar o próximo !"
INKEY(0)
IF EOF()
@ 24,00 SAY "Fim da procura ! Encontrados "+STR(CONTA,3)+" registros."
EXIT
ENDIF
CONTINUE
ENDDO
No exemplo o sistema acharia qualquer uma das pesquisas abaixo :
GLAUCO
CRUZ
CRUZ COSTA
GLAUCO CRUZ
COSTA
CO CRUZ CO
Até logo.
Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Pesquisa com locate ou outro
Espero não complicar muito... mas a fim de insentivar a melhoras com outros recursos, gostaria de mostrar um ótimo
exemplo aqui na seção de Downloads que te ajudará a ampliar com novas idéias: https://pctoledo.org/download/cop ... ualiza.txt
exemplo aqui na seção de Downloads que te ajudará a ampliar com novas idéias: https://pctoledo.org/download/cop ... ualiza.txt
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: pesquisa com locate ou outro
Outra coisa. Glauco, o uso do LOCATE em base de dados com muitos registro e em rede pode prejudicar o desempenho do sistema, sempre que poder evite o uso de LOCATE, porem em DBF que você sabe que nunca vai crescer muito a quantidade de registro o uso dele pode ser aplicado sem dor de cabeça.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Pesquisa com locate ou outro
É isso mesmo, muito importante mencionar !. Mas também pode fazer uma opção de busca parcial e outra com o comando seek a medida que digita vai localizando o registro... Terem opções a mais para casos eventuais, até são válidos também. Mas é como o colega falou, tente evitar o comando LOCATE e sim o SEEK. A não ser que utilize outro RDD que faz uso do WILDSEEK (complicando mais um pouquinho... e quiser ver sobre isso: https://pctoledo.org/forum/search ... bmit=Busca)o uso do LOCATE em base de dados com muitos registro e em rede pode prejudicar o desempenho do sistema
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Re: pesquisa com locate ou outro
Este LOCATE FOR ALLTRIM(MNOME)$NOME poderia ser usado com o comando seek ?
abs !
abs !
mixsistemas@gmail.com
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Pesquisa com locate ou outro
Apenas usando o SEEK nativo do Clipper, irá procurar na chave todo nome que começa com: MNOME Alias NÃO pode utilizar o operador de referência $. Mas ao invés de utilizar o SEEK você pode utilizar o WildSeek, mas aí teria que utilizar outra RDD (seu arquivos de índices deixariam de ser NTX). Ia ter que utilizar outro tipo de índices.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Re: pesquisa com locate ou outro
Prezados Colegas
Eu sei que o uso do LOCATE é mais lento, porém isso só vale para máquinas muito lentas. Com os atuais equipamentos é praticamente imperceptivel essa "lentidão".
Óbviamente que o uso do SEEK é mais conveniente, mas em certos casos o LOCATE torna-se mais interessante e até única solução nativa.
Fiz um teste de pesquisa com LOCATE em uma base de dados com 560.000 Registros, o tempo de pesquisa foi de menos de 3 segundos, pode ser muito se comparado a uma busca indexada, porém eu não preciso ter mais um indice, posso fazer a pesquisa de forma mais minuciosa, entre outras opções.
Então cada caso é um caso, vai depender do objetivo e saída desejada.
Até logo.
Marcelo
Eu sei que o uso do LOCATE é mais lento, porém isso só vale para máquinas muito lentas. Com os atuais equipamentos é praticamente imperceptivel essa "lentidão".
Óbviamente que o uso do SEEK é mais conveniente, mas em certos casos o LOCATE torna-se mais interessante e até única solução nativa.
Fiz um teste de pesquisa com LOCATE em uma base de dados com 560.000 Registros, o tempo de pesquisa foi de menos de 3 segundos, pode ser muito se comparado a uma busca indexada, porém eu não preciso ter mais um indice, posso fazer a pesquisa de forma mais minuciosa, entre outras opções.
Então cada caso é um caso, vai depender do objetivo e saída desejada.
Até logo.
Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
