FoxPro/Visual FoxPro - Como asignar consulta a Grid???

 
Vista:

Como asignar consulta a Grid???

Publicado por Jancelmo (22 intervenciones) el 13/05/2009 17:21:09
Hola Programadores:
Necesito una mano de ustedes con esto, les comento que tengo un formulario con un Grid1 el cual me muestra mis Clientes de la misma tabla clientes, este formulario es un alta,baja y modificaciones de los cliente, los cuales aparte son mostrados en el Grid1, lo que le agregue fue un (grupo de opciones, optiongrup) de tres opciones en los cuales en la opcion uno quiero que me ordene la tabla por Apellido, la dos por Nombre y la tres por Domicilio, el problema es que solo pude hacer es que me las ordene la primera opcion el resto me deja las tablas en blanco, otra de las cosas que me dejo de hacer es que cuando le doy primero, anterior, siguiente, ultimo, me sigue manteniendo los que se encontraban ordenados desde un principio...
En algunos lugares hablan de cursores pero no se de que se trata, soy bastante nuevo en esto.-

Este es mi codigo para la opcion1, lo mismo es para la dos y la tres cambiando el ORDER BY por lo que quiero ordenar.-

thisform.grid1.recordsourcetype=4
thisform.grid1.RecordSource = "SELECT clientes.apellido,clientes.nombre, clientes.domicilio,clientes.telefono ;
FROM clientes ;
ORDER BY clientes.apellido"
thisform.grid1.Refresh

Desde ya muchas gracias sea cual fuese su respuesta!!!
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

RE:Como asignar consulta a Grid???

Publicado por JorgeE (423 intervenciones) el 13/05/2009 18:24:10
Amigo, buen dia
yo estoy haciendo algo similar, y uso cursores

Thisform.grid1.recordsourcetype = 1

en el optiongroup yo tengo en el evento valid de cada opcion que se ejecute un procedimiento, el cual es el siguiente:

thisform.grid1.RecordSource =" "

IF ThisForm.optiongroup1.option1.Value=1
wOrden=FIELD(1,'Clientes')
ELSE
wOrden=FIELD(2,'Clientes')
ENDIF

Select cCodigo, cNombre, cCiudad from clientes where !Deleted() ;
Order by &wOrden into cursor tmpAuxiliar
go top

thisform.grid1.RecordSource = "tmpAuxiliar"

checalo
suerte
Saludos
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

RE:Como asignar consulta a Grid???

Publicado por Pablo (22 intervenciones) el 13/05/2009 21:08:05
Hola JorgE:
Mira lo prove pero la verdad es que no me anda!!!

El codigo que me pasaste es asi tal cual lo pones???
Ovio que para mi no porque en mi select seria (SELECT clientes.apellido,clientes.nombre, clientes.domicilio,clientes.telefono ;)

Otra cosa Me podrias explicar estas lineas...

thisform.grid1.RecordSource =" " *esta es que esta en blanco la asignacion

IF ThisForm.optiongroup1.option1.Value=1
wOrden=FIELD(1,'Clientes')
ELSE
wOrden=FIELD(2,'Clientes')
ENDIF

y por lo del IF puede ser que lo ordena ciempre por clientes?
Gracias de todas formas!!

Saludos
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

RE:Como asignar consulta a Grid???

Publicado por JorgeE (423 intervenciones) el 16/05/2009 19:50:47
Hola amigo,

claro que asi como puse el codigo, asi es como lo uso, obvio que mis tablas no sin identicas a las tuyas, pero si es asi como funciona y me funciona perfectamente

thisform.grid1.RecordSource =" " esta es para inicializar por decir de alguna manera la asignacion del grid

el IF es para indicar por que campo hara el ordenamiento, si por codigo (FIELD(1,"clientes)) o por nombre (FIELD(2,"clientes"))

saludos
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

RE:Como asignar consulta a Grid???

Publicado por Jose Gamboa (33 intervenciones) el 09/06/2009 01:38:08
Hola!
Por si aun no se resuelve tu duda, te mando una opcion y una explicacion, ademas para aquellos que visiten posteriormente y les pase lo mismo
El grid
Problema 1
cuando se inicializa el grid con un recordsourcetype=4 y un recordsource=consulta, el grid adquiere por defecto en las columnas y todo el contenido de la consulta inicial, si se cambia solamente el recordsource desde codigo de programacion, el contenido del grid desaparece, para solucionarlo hay 2 formas, una es borrar el objeto grid y volverlo a crear para que se inicialize de nuevo con el recordsource nuevo o bien volver a definir las variables para configurar el grid como columcount, recordsourcetype, recordsource, etc. ademas de los headers de columna y cosas asi
Problema 2
cuando se inicializa un grid con un recordsourcetype=1 y un recordsource=alias y este alias es el resultado de una consulta pasa lo mismo que en el caso anterior y la solucion es la misma.
el porque de los dos casos es que cuando se ejecuta una consulta y se crea un cursor de por medio el cursor existe mientras no se vuelva a ejecutar otra vez la consulta ya que el cursor se elimina y por consecuencia los datos dejan de existir, por eso se queda en blanco el grid, al no reinicializar el grid para que tome otra vez valores que lo vinculen a la consulta pues el grid permanece en blanco.
Una vez explicado lo anterior lo mejor es:
crear un metodo dentro del form llamado por ejemplo inicializar_grid()
el cual sera como sigue
PROCEDURE INICIALIZAR_GRID
LPARAMETERS id_orden
THISFORM.LockScreen = .T.
WITH THISFORM.Grid1
*** Rellenando el Grid de Productos en Proceso de Terminado***
SELECT * FROM mi_tabla;
ORDER BY &ID_ORDEN;
INTO CURSOR cursor_tmp
&&fijo el ancho de los campos que se muestran y escojo cuantos campos mostrar
.ColumnCount = 5
.Column1.Width = 75
.Column2.Width = 75
.Column3.Width = 75
.Column4.Width = 185
.Column5.Width = 75
&&Edito los headers de los campos que se muestran
.Column1.Header1.Caption = "campo1"
.Column2.Header1.Caption = "campo2"
.Column3.Header1.Caption = "campo3"
.Column4.Header1.Caption = "campo4"
.Column5.Header1.Caption = "campo5"
&&Para configurar que campos mostrar se configura el controlsource de columna y textbox
.Column1.controlsource = "campo2"
.Column1.textbox.controlsource = "campo2"
&& si se configura el control source de solo 1 columna o un numero menor de columnas que columncount, el resto de las columnas iran tomando los valores en orden de las columnas de la consulta, en este caso la columna2 tomara los valores de campo1, colum3 los valores de campo2, etc...

.RecordSource = 'process_mov1_tmp'
llnProcess = _Tally
THISFORM.LockScreen = .F.

RETURN !EMPTY(lInProcess) && por si se quiere retornar algun valor que indique que se ejecuto alguna consulta y la consulta devolcio algun valor
ENDWITH
ENDPROC

en el optiongroup se debe escribir el siguiente codigo dentro del interactivechange y del programaticchange (si sus valores pueden cambiar por codigo)
do case
case this.value=1
INICIALIZAR_GRID("campodeorden1") &campo de orden de la opcion1
case this.value=1
INICIALIZAR_GRID("campodeorden2") &campo de orden de la opcion2
case this.value=1
INICIALIZAR_GRID("campodeorden3") &campo de orden de la opcion3
endcase

en el metodo init del grid se debe escribir el siguiente codigo
INICIALIZAR_GRID("campoordenprefefinido") &este es el campo con el que inicialmente se encuentra ordenado el grid
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