FoxPro/Visual FoxPro - Filtrar datos al escribir

   
Vista:

Filtrar datos al escribir

Publicado por Ruben Dario (56 intervenciones) el 15/12/2014 18:04:13
Buenas Tardes

Necesito saber algun comando para filtrar todas las palabras que escriba

Ejemplo

1 Ruben Dario
2 Dario Ruben
3 Pedro Juan Dario
4 Juan Perez
Si yo es escribo Dario que me muestre el 1, 2 y 3

Este es mi comando con el cual busco en mi caja de texto

cFiltro=alltrim(this.value)
if empty(alltrim(this.value))
set filter to
else
set filter TO ATC(cFiltro,&xCampo)>0
endif

thisform.Gri.Refresh

Desde ya muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Filtrar datos al escribir

Publicado por Fidel José (558 intervenciones) el 16/12/2014 00:22:20
Lo puedes resolver utilizando otra técnica:
1) Generar un cursor vacío para asociar al control grid
2) Efectuar el filtro con SELECT SQL
3) Zap y append from para el cursor del control grid

El siguiente ejemplo está hecho en base a una tabla llamada "clientes". Reemplazo la entrada de la interfaz por una lista de nombres a buscar, solamente para ver el efecto. Las tags indican la ubicación, pero para un ejemplo puedes poner este código todo junto en un commandbutton.

Al LIKE de la cláusula WHERE de Select Sql, lo puedes armar según la necesidad.
1) chr(37)+lcPalabraBuscada+chr(37), traerá el string donde esté (no solamente la palabra entera)
2) chr(37)+lcPalabraBuscada+chr(32)+chr(37), traerá el string si es seguido de un espacio
3) chr(37)+chr(32)+lcPalabraBuscada+chr(32), traerá solamente el string buscado si no está en primer orden.
etc. (usa otras combinaciones, quitando los chr(37), por ejemplo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
*<Load>
SELECT nombre,cuit,idclien FROM clientes WHERE .f. INTO CURSOR curClien READWRITE
*</Load>
 
*<Init>
if !PEMSTATUS(thisform,"Grilla1",5)
       thisform.newobject("Grilla1","Grid")
       thisform.grilla1.visible=.t.
endif
 
thisform.grilla1.RecordSource="curClien"
*</Init>
 
*<commandButton_interfaz>
*Busqueda de un nombre
lcListBuscar="Jorge,Roberto,Acin"
lcCampo="NOMBRE"
FOR i=1 TO GETWORDCOUNT(lcListBuscar,",")
	lcBuscar=GETWORDNUM(lcListBuscar,i,",")
 
	IF !EMPTY(lcBuscar)
		SELECT curClien
		ZAP
 
		lcLike=[%]+UPPER(lcBuscar)+[%]
		SELECT nombre,cuit,idclien FROM clientes WHERE UPPER(&lcCampo) LIKE lcLike INTO CURSOR curBusca
		IF _tally>0
			SELECT curClien
			APPEND FROM DBF("curBusca")
			SELECT curBusca
			USE
		ENDIF
		thisform.grilla1.Refresh
	ENDIF
	MESSAGEBOX("lcBuscar="+lcbuscar)
NEXT
*</commandButton_interfaz>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar