codigo para buscar caracteres y numeros dentro del txt en interactivechange?

1,650 views
Skip to first unread message

magdalena concepcion cañete fretes

unread,
Aug 29, 2010, 4:03:46 PM8/29/10
to Comunidad de Visual Foxpro en Español
hola amigos..............
quisiera saber si alguien me puede regalar un codigo para busqueda de
caracter con numeros...yo tengo uno pero solo busca caracteres y no
trae el registro si tengo primero numeros...este es el codigo que
tengo en mi txt en interactivechange....

gracias a todos por su ayuda...

LOCAL lc,lnrecno
IF thisform.combo1.value = "Producto"
SELECT articulobuscar
lc = ALLTRIM(this.Value)
lnrecno = RECNO()
IF articulobuscar.prod_descripcion>=lc
IF NOT BOF()
SKIP -1
ENDIF
IF articulobuscar.prod_descripcion<lc
IF lnrecno<= RECC()
GO RECNO()
ELSE
GO bott
ENDIF
RETURN
ENDIF
IF NOT EMPTY(ORDER())
SEEK lc
ELSE
GO top
LOCATE REST FOR articulobuscar.prod_descripcion=lc WHILE
articulobuscar.prod_descripcion<=lc nooptimize
ENDIF
ELSE
LOCATE REST FOR articulobuscar.prod_descripcion=lc WHILE
articulobuscar.prod_descripcion<=lc nooptimize
ENDIF

IF lnrecno # RECNO()
thisform.grid1.SetFocus
thisform.text1.SetFocus
ENDIF
RETURN
ENDIF

Daniel Sánchez

unread,
Aug 29, 2010, 9:18:17 PM8/29/10
to publice...@googlegroups.com
para consultar datos u obtener datos de una tabla deberías usar !atc("mitextoabuscar",micampo)=0, con esto busca en cualquier parte del campo la coincidencia si esta al inicio después o al final.

-- 
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil 044-949398047
Trujillo - Perú

magdalena concepcion cañete fretes

unread,
Aug 29, 2010, 11:11:29 PM8/29/10
to Comunidad de Visual Foxpro en Español
Hola Daniel...creia que hoy no ibas a tener un mini vacacion..pero
bueno gracias por todo en serio te agradesco mucho por tanta
amabilidad que nos diste..todo bien encontramos todas las librerias de
vfp.....ahora quiero mejorar nomas mi buscador de registros....te
comento mis datos que se encuentran en postgres lo cargo en un cursor
en mi formulario de fox y lo tiro en un grid que lo llamo con un
alias y desde mi txt pongo el registro que quiero buscar....pues bien
me enviaste el pequeño codigo y no cambiaria en nada el codigo que me
enviaste en esta situacion?

Daniel Sánchez

unread,
Aug 29, 2010, 11:26:17 PM8/29/10
to publice...@googlegroups.com
Debo entender que traes toda la información de la tabla a tu aplicación lo muestras en un grid y luego de ahí buscas el dato que deseas mmmm, a mi parecer, es mi criterio que aplico, al iniciar no traigo ningún dato, el usuario pone su dato a buscar y recién traigo los datos que coinciden con lo digitado por el usuario, para tablas con gran cantidad de datos es lo mas recomendado.

Daniel Sánchez

unread,
Aug 29, 2010, 11:27:14 PM8/29/10
to publice...@googlegroups.com
En cuanto a la ayuda, estamos para servirnos, te agradezco valga la redundancia, el agradecimiento.

magdalena concepcion cañete fretes

unread,
Aug 30, 2010, 12:25:49 AM8/30/10
to Comunidad de Visual Foxpro en Español

Entiendo Daniel pero mas adelante quiero cambiarlo de todos modos mi
buscador...asi como me sugeriste lo voy a hacer..mientreas voy a
seguir usando el otro codigo para terminar mi sistema para mi tesis...

magdalena concepcion cañete fretes

unread,
Aug 30, 2010, 12:32:05 AM8/30/10
to Comunidad de Visual Foxpro en Español
Daniel y como haria mi codigo si quiero un buscador con los datos
cargados ya dentro de mi grid? porq el codigo que envien no funciona
bien..

On 29 ago, 23:27, Daniel Sánchez <resetsoftw...@gmail.com> wrote:

Daniel Sánchez

unread,
Aug 30, 2010, 12:45:37 AM8/30/10
to publice...@googlegroups.com
Envíame unas capturas de tus pantallas para tener una idea de lo que quieres lograr o como lo quieres lograr.

Maggi Fretes

unread,
Aug 30, 2010, 1:11:56 AM8/30/10
to publice...@googlegroups.com

lo que quiero lograr Daniel es que me busque las posibles coincidencias que escribo en mi text dentro de mi grid ...espero que te sirva el archivo que te envie....Sonrisa
Date: Sun, 29 Aug 2010 23:45:37 -0500
Subject: Re: [vfp] Re: codigo para buscar caracteres y numeros dentro del txt en interactivechange?
From: resets...@gmail.com
To: publice...@googlegroups.com
Aca quiero ingresar los parámetros para que me busque luego en mi grid las posibles coincidencias o el registro mismo.docx

Daniel Sánchez

unread,
Aug 30, 2010, 1:45:52 AM8/30/10
to publice...@googlegroups.com
Podrías simplemente poner al área de tu tabla un set filter to !atc(ctextoabuscar,campo)=0 y dar un thisform.grid.refresh y te mostraría los datos que coinciden con lo que esta en el textbox

Maggi Fretes

unread,
Aug 30, 2010, 1:50:45 AM8/30/10
to publice...@googlegroups.com
y ese codigo lo puedo colocar en el interactivechange del txt o en un command?..... la variable campo a que se refiere?


Date: Mon, 30 Aug 2010 00:45:52 -0500

Subject: Re: [vfp] Re: codigo para buscar caracteres y numeros dentro del txt en interactivechange?
From: resets...@gmail.com
To: publice...@googlegroups.com

Daniel Sánchez

unread,
Aug 30, 2010, 2:08:01 AM8/30/10
to publice...@googlegroups.com
claro lo podrías poner en tu interactivechange de tu textbox o en el valid al salir del campo, todo depende como quieres que se visualice, si es muchos datos el digitar cada letra y filtrar la tabla podría demorar la escritura de tu textbox, depende que hagas pruebas y veas como afecta al usuario, la variable campo se refiere al campo de tu tabla por donde deseas que se realice el filtrado de los datos.

Walter R. Ojeda Valiente

unread,
Aug 30, 2010, 2:09:16 AM8/30/10
to publice...@googlegroups.com
Hola Maggi

¿Lo que quieres es que lo que escribas en un campo de texto te aparezca en la grilla?

¿Quiéres que te muestre los registros que empiezan ese texto o que ese texto pueda estar en cualquier parte?

La solución más sencilla es utilizar SET FILTER.

TextoBuscado = "PEREZ"

Select MiCursor

Opción 1: SET FILTER TO Left(MiCampo, Len(TextoBuscado)) = TextoBuscado     && Si el texto buscado debe estar al principio del campo

Opción 2: SET FILTER TO TextoBuscado $ MiCampo     && Si el texo buscado puede estar en cualquier parte del campo

LOCATE

ThisForm.Grilla1.Refresh()

Saludos.

Walter.

P.D.: Debes utilizar uno de los SET FILTER, no ambos.

Maggi Fretes

unread,
Aug 30, 2010, 2:13:44 AM8/30/10
to publice...@googlegroups.com
entiendo Daniel.....bueno lo estuve probando con este codigo no se si lo hice bien y me sale un mensaje de error de , el valor, o tipo de argumento no es valido para la funcion....

set filter to !atc(this.Value,artic.prod_descripcion)=0
thisform.grid1.Refresh


Date: Mon, 30 Aug 2010 01:08:01 -0500

Subject: Re: [vfp] Re: codigo para buscar caracteres y numeros dentro del txt en interactivechange?
From: resets...@gmail.com
To: publice...@googlegroups.com

Daniel Sánchez

unread,
Aug 30, 2010, 2:19:59 AM8/30/10
to publice...@googlegroups.com
lo que pasa el problema es el ámbito del valor del this.value, lo que tendrías que poner en todo caso seria la ruta completa del objeto, thisform.mitextbox.value en lugar de solo this.value, prueba y me comentas.

El amigo Walter O. también te esta dando una buena sugerencia sobre el tema.

Lo que no te olvides del ámbito de la variable que uses en el set filter, porque si sales de un método y usabas una variable local, esta deja de existir y el set filter no tendría referencia del dato a consultar.

Maggi Fretes

unread,
Aug 30, 2010, 2:31:25 AM8/30/10
to publice...@googlegroups.com
ya lo probe gracias Walter y Daniel por su sugerencia pero no me trae nada en set filter.....sera que se puede buscar tambien las coincidencias sin tener que usar el set filter ?


Date: Mon, 30 Aug 2010 01:19:59 -0500

Subject: Re: [vfp] Re: codigo para buscar caracteres y numeros dentro del txt en interactivechange?
From: resets...@gmail.com
To: publice...@googlegroups.com

Daniel Sánchez

unread,
Aug 30, 2010, 2:41:35 AM8/30/10
to publice...@googlegroups.com
Y que te da o no te muestra nada en tu grid

Maggi Fretes

unread,
Aug 30, 2010, 2:42:13 AM8/30/10
to publice...@googlegroups.com
nada no me muestra en mi grid.......


Date: Mon, 30 Aug 2010 01:41:35 -0500

Subject: Re: [vfp] Re: codigo para buscar caracteres y numeros dentro del txt en interactivechange?
From: resets...@gmail.com
To: publice...@googlegroups.com

Daniel Sánchez

unread,
Aug 30, 2010, 2:48:26 AM8/30/10
to publice...@googlegroups.com
Has revisado como esta aplicando el filtro, consúltalo en el entorno de datos o datasesion para ver que aplica el filtro, una cosa más se supone que los datos ya los tienes traídos de tu servidor de bd.

Maggi Fretes

unread,
Aug 30, 2010, 2:52:35 AM8/30/10
to publice...@googlegroups.com
si las los traigo de la bd y los cargo en un cursor para luego llegar mi grid...y no hay otra manera para buscar los datos sin utilizar el set filter?


Date: Mon, 30 Aug 2010 01:48:26 -0500

Subject: Re: [vfp] Re: codigo para buscar caracteres y numeros dentro del txt en interactivechange?
From: resets...@gmail.com
To: publice...@googlegroups.com

Daniel Sánchez

unread,
Aug 30, 2010, 3:01:32 AM8/30/10
to publice...@googlegroups.com
como te comente al inicio, lo mejor es traer un cursor en blanco lo puedes lograr haciendo un select * from tutabla where 2=1, luego en tu valid de tu textbox realizas un nuevo llamado a tu bd select * from tutabla where tucampo=mivalorabuscar y refrescas tu grid, otra cosa antes de llamar a una consulta debes poner el recordsource="" para que no cambie las columnas del grid.

elkin dario uribe torres

unread,
Aug 30, 2010, 8:47:10 AM8/30/10
to publice...@googlegroups.com
Buenos dias Maggi

Revisa si esto es lo que estas pensando para tus busquedas interactiva y me comentas.  Esto lo que hace es buscar en una tabla dada por medio de cualquiera de los campos  en las opciones y de acuerdo a como digitas va seleccionando los registros coincidentes.

Te adjunto unas imagenes


Elkin Uribe
buesqueda4.JPG
buesqueda1.JPG
buesqueda2.JPG
buesqueda3.JPG

Maggi Fretes

unread,
Aug 30, 2010, 10:03:31 AM8/30/10
to publice...@googlegroups.com
Hola Elkin si asi mismva  es la funcion que quiero pero la diferencia es que los datos ya muestro es mi grid y el cursor dentro de mi grid  se mueve al encontrar las coincidencias...
solo que mi codigo creo que esta mal de mi interactivechange dentro de mi txt y no se como solucionarlo te adjunto la imagen de como es mi buscador y el codigo dentro de mi txt....
este codigo solo me muestra el ultimo registro de mi cursor.....no las coincidencias


LOCAL lc,lnrecno
IF thisform.combo1.Value="Producto"
    SELECT artic
    lc = ALLTRIM(thisform.text1.Value)
    lnrecno = RECNO()
    IF artic.prod_descripcion >= lc

        IF NOT BOF()
            SKIP -1
        ENDIF
        IF artic.prod_descripcion < lc

            IF lnrecno <= RECC()
                GO RECNO()
            ELSE
                GO bott
            ENDIF
            RETURN
        ENDIF
        IF NOT EMPTY(ORDER())
            SEEK lc
        ELSE
            GO top
            LOCATE REST FOR artic.prod_descripcion = lc WHILE artic.prod_descripcion <= lc nooptimize
        ENDIF
    ELSE
        LOCATE REST FOR artic.prod_descripcion = lc WHILE artic.prod_descripcion <= lc nooptimize

    ENDIF
   
    IF lnrecno # RECNO()
        thisform.grid1.column1.text1.SetFocus
        thisform.grid1.Refresh
        thisform.text1.SetFocus
    ENDIF
    RETURN
ENDIF


Date: Mon, 30 Aug 2010 07:47:10 -0500

Subject: Re: [vfp] Re: codigo para buscar caracteres y numeros dentro del txt en interactivechange?
Aca quiero ingresar los parámetros para que me busque luego en mi grid las posibles coincidencias o el registro mismo.docx

elkin dario uribe torres

unread,
Aug 30, 2010, 10:28:55 AM8/30/10
to publice...@googlegroups.com
Mira Maggi

Te paso a continuacion parte del codigo que tengo en el metodo init del formulario para cargar todos los datos de la tabla desde sql.

set textmerge on TO memvar lcStringSQL noshow
\select * from encconvenio order by numero
set textmerge to
DO conectarbasemeco
STORE sqlexec(controlador,lcStringSQL,'Compras') TO a
sqldisconnect(0)
SELECT compras  

Luego en el interactivechange podrias colocar este codigo

        select Prefijo,numero,fecha_convenio,cedula_moroso,nombre_moroso,ficha,nombre_deudor,acuerdo_municipal from compras;
            where ALLTRIM(this.value) $ ALLTRIM(numero);
            order by numero;
            into cursor resultado
        ThisForm.List1.rowsource="resultado.prefijo+numero,TTOD(fecha_convenio),ficha,cedula_moroso,nombre_moroso"
        thisform.refresh

De esta forma no me ha fallado la busqueda, te comento que en una base de datos de 120000 registros demora muy poco.

No se si me hice entender, espero que sea lo que buscas, en la parte del where lo puedes acomodar al campo buscado, solo ten en cuenta el tipo de datos a comparar (siempre deben ser character).


Elkin Uribe
Medellin - Colombia

Luis Maria Guayan

unread,
Aug 30, 2010, 8:37:23 PM8/30/10
to publice...@googlegroups.com
Mira este artículo que contiene una clase que creo que es lo que estás buscando

-- DataLookup - A framework class --
http://weblogs.foxite.com/jijo_pappachan/archive/2010/05/12/10881.aspx



Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Miguel Canchas

unread,
Aug 31, 2010, 5:20:13 PM8/31/10
to publice...@googlegroups.com
Los set filter como saben hace lenta las busquedas
 
usa esto, lo uso sin importar en donde esta lo que busco, en este ejemplo solo lo hice a la volada para 2 campos, me falto ponerlo en automatico para que recorra todos los campos.
 
 

DO CASE

CASE INLIST

(SUBSTR(ALLTRIM(Thisform.text1.Value),1,1),'0','1','2','3','4','5','6','7','8','9')

SELECT curped

SET ORDER TO idped

SELECT razclien,idped,idclien FROM curped WHERE idped LIKE ;

'%'+

ALLTRIM(thisform.text1.Value)+'%' INTO CURSOR cFind

IF RECCOUNT('cFind')=0

MESSAGEBOX('Orden no Encontrada !!!!!!!!!!!!!',64,'Aviso del Sistema')

ELSE

thisform

.grilla1.RecordSource = 'cFind'

ENDIF

OtherWise

SELECT

curped

SET ORDER TO clienidped

SELECT razclien,idped,idclien FROM curped WHERE razclien LIKE ;

'%'+

ALLTRIM(thisform.text1.Value)+'%' INTO CURSOR cFind

IF RECCOUNT('cFind')=0

MESSAGEBOX('Cliente no Encontrado !!!!!!!!!!!!!',64,'Aviso del Sistema')

ELSE

thisform

.grilla1.RecordSource = 'cFind'

ENDIF

ENDCASE

Walter R. Ojeda Valiente

unread,
Sep 1, 2010, 2:17:33 AM9/1/10
to publice...@googlegroups.com
Es cierto que el SET FILTER es lento, pero con las computadoras súper veloces de ahora debes tener millones de registros para que esa lentitud sea apreciable.

Saludos.

Walter.




From: mcan...@tracusape.com
To: publice...@googlegroups.com

Subject: Re: [vfp] Re: codigo para buscar caracteres y numeros dentro del txt en interactivechange?
Date: Tue, 31 Aug 2010 16:20:13 -0500

José Anthony Contreras Peralta

unread,
Sep 1, 2010, 2:56:40 AM9/1/10
to publice...@googlegroups.com
Yo uso locate for, ya que es más rápido todavía.

No confundirse con locate solamente solo el comando locate es lento.

Para que la consulta sea optimizable se utiliza LOCATE FOR con una expresión de índice y lo hace volado.
ejemplo:

locate for producto=alltrim(this.value) && Busco estoy ordenado por producto en la consulta.

Saludos.

José Anthony Contreras Peralta

unread,
Sep 1, 2010, 3:11:41 AM9/1/10
to publice...@googlegroups.com
Una aclaración, yo lo primero que hago es una consulta sql, para tener los registros locales en ese momento porque cuando se trata de trabar en red con bastante tráfico de red se nota si todos consultan a la vez, entonces lo mejor es tirar la consulta y luego buscar, si es localmente el set filter no debería demostrar lentitud.
Reply all
Reply to author
Forward
0 new messages