FoxPro/Visual FoxPro - Una Segunda consultra sobre un cursor.

   
Vista:

Una Segunda consultra sobre un cursor.

Publicado por es_binario (757 intervenciones) el 17/01/2013 13:06:35
Tengo una consulta, resulta que tengo un cursor que es generado por una consulta sql a mysql, bueno el caso es que después tengo que hacer una sub-consulta sobre el cursor resultante…


Y me preguntaba si no habría alguna manera de hacer la consulta o un filtrado sobre el mismo cursor sin tener que crear otro…


Consulta 1 sobre mysql

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
*// cargando datos a la grilla
IF Connectar > 0
	estoycon = .T.
	TRY
	TEXT TO sSqlcmd NOSHOW
	   SELECT * FROM color c order by nombrecolor;
	ENDTEXT
 
	cmd = SQLEXEC(Connectar, sSqlcmd,"cur_colores")
	 IF cmd > 0
	 		WITH Thisform.grilla1
	 			.RecordSource = "cur_colores"
	 			.Refresh()
	 		ENDWITH
 
	 ELSE
	  	AERROR(laErr)
	 	MESSAGEBOX("No se pudo conectar a mySQL. Error: " + CHR(13) + laErr[2])
	 ENDIF
 
	 CATCH
	 	AERROR(laErr1)
	 	MESSAGEBOX("Ocurrio un problema" + CHR(13) + laErr1[2])
	 ENDTRY
ENDIF


El resultado de esta consulta se guarda en este cursor.
1
"cur_colores"


Aquí la cuestión es. Que para facilitarle al usuario el ingreso de un nuevo color, al momento de teclearlo en el interactivechange del Textbox hago una segunda consulta pero sobre el cursor. Esto para no sobre saturar la red con cada tecleo.

1
2
3
4
5
6
7
8
9
10
11
SELECT cur_colores
IF RECCOUNT() > 0
	*// realiza la consulta
	LOCAL ColorBusca as String
	ColorBusca = ALLTRIM(This.Value)
	Thisform.grilla1.RecordSource = ""
	SELECT * FROM cur_colores WHERE cur_colores.nombrecolor like "%"+ ColorBusca +"%" ;
		INTO CURSOR cur_sub_colores ORDER BY cur_colores.nombrecolor ASC
	Thisform.grilla1.RecordSource = "cur_sub_colores"
	Thisform.grilla1.Refresh()
ENDIF


Segundo cursor.
1
cur_sub_colores


La situación aquí, es que ahora tengo un segundo cursor es decir un sub- cursor, funciona bien, pero me gustaría solo hacer una especie de filtrado sobre el cursor y un refresh a la grilla, no se si me explico y se pueda.



Gracias de Antemano.
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

Una Segunda consultra sobre un cursor.

Publicado por Saul (676 intervenciones) el 18/01/2013 05:40:10
No te hagas chibolas amigo..

la cuestión esta sencilla
En primer lugar no lo pontas en interactivechange eso pone lenta la red si eso es lo que pretendes hacer.
ponlo en en en el metodo valid

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
38
39
40
41
42
43
44
45
46
47
* Luego cuando el campo Textbox  reciba el Foco pon esto
*GotFocus()
 
IF Connectar > 0
	estoycon = .T.
	TRY
 
        Do Arma_Cursor("")
 
	 CATCH
	 	AERROR(laErr1)
	 	MESSAGEBOX("Ocurrio un problema" + CHR(13) + laErr1[2])
	 ENDTRY
ENDIF
 
 
*Cuando uses el filtro yo no lo pondria en InteractiveChange
*Ponlo en el Valid() o bien el KeyPress = 13
 
  Do Arma_Cursor(ALLTRIM(This.Value))
 
 
*-Procedmiento o Metodo en tu forma
PROCEDURE Arma_Cursor
PARAMETER _Nombre
 
	ColorBusca = '%' + ALLTRIM(_Nombre) + '%'
 
        TEXT TO sSqlcmd NOSHOW
	   SELECT * FROM color c order
           WHERE c.nombrecolor LIKE ?ColorBusca
           ORDER BY c.nombrecolor
	ENDTEXT
 
	cmd = SQLEXEC(Connectar, sSqlcmd,"cur_colores")
	 IF cmd > 0
	 		WITH Thisform.grilla1
	 			.RecordSource = "cur_colores"
	 			.Refresh()
	 		ENDWITH
 
	 ELSE
	  	AERROR(laErr)
	 	MESSAGEBOX("No se pudo conectar a mySQL. Error: " + CHR(13) + laErr[2])
	 ENDIF
 
RETURN
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

Una Segunda consultra sobre un cursor.

Publicado por es_binario (757 intervenciones) el 18/01/2013 22:28:30
Muchas gracias lo voy a probar, si la cuestion en este caso no es tan complicada pero en productos si, por que son 175 mil, y para no traerlos todos por red, ahorita voy a hacer pruebas con tu codigo.

te agradezco.
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
Imágen de perfil de Edgar Zambrano

Una Segunda consultra sobre un cursor.

Publicado por Edgar Zambrano (72 intervenciones) el 28/01/2013 23:54:50
la primera consulta la estas haciendo en el init o load del formulario, si este es el caso, lo que puedes hacer es un set filter to al cursor creado y listo, asi te hara un filtro en esos datos.

algo como esto

InteractiveChange - Textbox1
set filter to
set filter to (cur_colores.nombrecolor like "%"+ ColorBusca +"%")
thisform.refresh()

de esta forma aplicas filtros a los datos de un grid desde un textbox
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