FoxPro/Visual FoxPro - Ayuda Set Filter & Grid

   
Vista:
Imágen de perfil de Marco

Ayuda Set Filter & Grid

Publicado por Marco (1 intervención) el 27/05/2015 22:55:51
Estoy haciendo unas prácticas y debo hacer una forma donde pueda buscar los libros que ya tengo registrados. Me recomendaron utilizar en nKeyCode con Set Filter pero no sé muy bien cómo utilizar estos dos.
Mis variables son autor - nombrel - genero - exi

Mi forma es así:

1

Y el código que tengo dentro del text1 es así:

2

No sé qué hacer a partir de ahí, por favor ayúdenme.
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

Ayuda Set Filter & Grid

Publicado por Fidel José (558 intervenciones) el 28/05/2015 00:08:13
El keypress para esa finalidad es un poco complicado, aunque se puede usar.
Lo que normalmente se utiliza es el Evento InteractiveChange, de donde no necesitas construir una cadena de búsqueda porque tomas la que se escribió.
Por otra parte, te conviene utilizar una propiedad del formulario para evitar que el SET FILTER se te vaya de alcance y te aparezca un error de variable indefinida. La propiedad la puedes agregar en el diseñador de formularios. También por código, por ejemplo, Addproperty(thisform,"miFiltro","")
*<InteractiveChange Event>
thisform.miFiltro=alltrim(this.value)
SELECT TablaLibros
IF EMPTY(THISFORM.FILTRO)
SET FILTER TO
ELSE
SET FILTER TO NOMBREL=THISFORM.FILTRO
ENDIF
GO TOP
THISFORM.GRID1.REFRESH

De todos modos te comento que eso es solo para tu práctica.

Si quieres o necesitas aprender Visual Fox, lo mejor es olvidarse de SET FILTER (que solamente resulta utilizable en tablas locales y cursores) y aprender SELECT SQL.
Por ejemplo, qué tal si el cliente no recuerda el nombre completo de un libro. Te dice, por ejemplo, "busco un libro, no sé bién el título, algo de Venas Abiertas". Entonces el SET FILTER no te servirá de nada. En cambio, en la instrucción LIKE del comando SELECT SQL en la cláusula WHERE puedes poner que busque "Venas" en donde fuere dentro del campo.

1
2
3
4
5
6
7
8
lcBusca = "Venas"
lcString =Chr(37)+lcBusca+Chr(37)
SELECT * FROM LIBROS WHERE nombrel LIKE lcString INTO CURSOR CURBUSCA
IF _TALLY > 0
         BROWSE
ELSE
        Messagebox("Nada parecido")
ENDIF
Este modo de trabajar, te obligará a replantear la asociacion de un cursor al grid. Lo que hacemos, normalmente, es crear un cursor en el LOAD del form con la estructura que se terminará mostrando.
*<LOAD>
&& esto crea un cursor vacío con la estructura de la tabla "LIBROS"
SELECT * FROM LIBROS WHERE .F. INTO CURSOR curGeneral READWRITE

*<INIT> && o mejor, en un método que se ejecute en el Init del form.
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
WITH thisform.grilla
	.REcordSource="curGeneral"
	.columncount=4
	.deletemark=.f.
	.ScrollBars=2
	.Setall("Readonly",.t.,"Column")
	.Setall("Fontsize",8,"Column")
	.Setall("Fontsize",8,"Header")
	.Setall("FontBold",.t.,"Header")
	WITH .Columns(1)
		.Header1.Caption="Autor"
		.ControlSource="curGeneral.autor"
		.width = 200
	ENDWITH
	WITH .columns(2)
		.header1.caption="Nombre del Libro"
		.ControlSource="curGeneral.nombrel"
		.width = 300
	ENDWITH
	WITH .columns(3)
		.header1.Caption="Género"
		.controlSource="curGeneral.genero"
		.width = 100
	ENDWITH
	WITH .columns(4)
		.header1.Caption="Existencia"
		.controlSource="curGeneral.exi"
		.InputMask="999,999"
		.Format="Z"
		.WIDTH = 80
	ENDWITH
ENDWITH

En el textbox de búsqueda, evento InteractiveChange
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT curGeneral
ZAP
thisform.grilla.refresh
 
lcBusca = alltrim(this.value)
lcString =Chr(37)+lcBusca+Chr(37)
SELECT * FROM LIBROS WHERE nombrel LIKE lcString INTO CURSOR CURBUSCA
IF _TALLY > 0
       select curGeneral
       APPEND FROM DBF("curBusca")
       go top
      Thisform.Grilla.Refresh
      Thisform.grilla.SetFocus
ELSE
        Messagebox("Nada parecido")
ENDIF
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar