La Web del Programador: Comunidad de Programadores
 
    Pregunta:  269 - BUSQUEDAS DE CARACTERES EN CLIPPER
Autor:  Julio
Hola, tengo dudas si clipper aportara ya una rutina para realizar busquedas en una base de datos de la siguiente manera: Aparece una lista desplegable de Nombres (por ejemplo) ordenados alfabeticamente y Un cuadro de texto en el cual el usuario pueda introducir el nombre de una persona pero que al momento de ir tecleando la lista desplegable se fuera actualizando alfabeticamente conforme digita. Por ejemplo si teclea una letra P, que aparcezcan en la lista ahora los que empiecen su nombre con P.
Y si no la hay, como puedo hacerla?. De antemano gracias y hasta luego :-)

  Respuesta:  Victor Palma
Hola, si ya solucionaste tu problema de la busqueda, exelente sino,
yo tengo una rutina utilizando dBedit, en la que busca no solo letras sino tambien espacios en planco y signos, si te interesa avisame a mi correo.

  Respuesta:  jose manuel gonzález
puedes hacerlo de la siguiente forma

dentro de un case
formo=space(20)
tecla=upper(Chr(lastkey()))
Do while tecla>"A" .or. tecla < "Z"
formo= formo+tecla
Seek formo
enddo

me parece que es asi, lo que pasa es que ya tiene rato que utilice esto y ahorita no tengo ningun programita pero si todavia te sirve el lunes te lo traigo ya completo si te urge escribeme

  Respuesta:  Mauricio Espinosa
Hola. Aqui te escribo un programa que realiza lo que necesitas.
USE Base.Dbf INDEX Nombre.Ntx
C:=""
K:=0
SET SOFTSEEK ON
DO WHILE .T.
K:=0
DBEDIT( 5 , 10 , 20, 70 )
@ 2,10 SAY " Introdusca Nombre :"
K:=INKEY(0)
IF K = 27
EXIT
ENDIF
C:=C+CHR (K)
SEEK C
ENDDO
SET SOFTSEEK OFF
Te Explico: Nombre.Ntx es tu base de datos indexada por el nombre.
El SET SOFTSEEK ON indica que cuando realice una busqueda de datos, busque lo mas parecido.
Te Explico : El programa al ejecutarce pasa por el DBEDIT muestrando la base de datos indexada por el nombre, luego se detiene en el K=INKEY(0), (el INKEY(0) espera hasta que se presione una tecla para continuar, retornando el valor de la tecla presionada en ASCII). Luego pasa por el C=C+CHR(K), que va transformando el valor de la letra en ASCII ( Variable K) en caracter y sumandola a la variable C, Despues al realizar el SEEK C, busca lo que contiene C , llevando el puntero de la base de datos hacia el nombre que mas se parece a C y retorna al DBEDIT y INKEY nuevamente para pedir la otra tecla que será sumada a C y realizar la siguiente busqueda.
La pregunta "IF K = 27"... es para salir del ciclo cuando presiones la tecla Escape.
Una vez fuera del ciclo "DO WHILE", se vuelve el SET SOFTSEEK a su estado inicial.

Espero que esto te sirva de ayuda

Chao, Compañero


  Respuesta:  Juan Reyes
Hola amigo, la utilización de DBEDIT ya está obsoleta, para ello CA ha pusto en nuestro amado clipper la clase TBrowse, la desventaja de DBEdit con respecto a TBrowse es que DBEDIt es un consumidor de memoria y lento por lo demás.

Con objetos TBrowse ganarás en tus aplicaciones flexibilidad, mucha rapidez y un gran ahorro de memoria, es un poquito dífícil pero vale la pena aprenderlo, el porque, porque cuando desarrolles sistemas para un entorno windows con una herramienta que te permita hacer aplicaciones para este entorno veras mucho de clases y objetos.

Asi que amigo, ánimo e incorpórate al mundo actual, las herramientas obsoletas.... chao con ellas


  Respuesta:  Alonso Salazar
Claro que si, si hay algo que no puedas hacer con clipper es porque no se puede hacer. Yo lo hago asi:

1- Tengo una base de datos con los registros que deseo.
2- Construllo un objeto TBrowse, como es un objeto puede hacerlo como me de la gana.
3- Dentro de un ciclo tomo en InKey(0).
4- Tengo una variable donde voy introduciendo las teclas que han presionado y le hago un seek al valor que tenga la variable.
5- Le envio el mensaje RefreashAll al TBrose y listo.

Si quieres un programa de ejemplo avisame.