Filtrar datos en un Grid Enviado por: trento Tenemos un posting donde se nos pide ayuda para lo siguiente: "Resulta que tengo 2 textboxs y en uno pongo una fecha inicial y en otra la final, y entonces en un grid me tiene que salir la informacion de los registros de clientes que su inscripcion este en ese rango de fechas." Asumamos que el Grid ya tiene las columnas formateadas para fecha, clave y nombre del cliente. El RecordSource del mismo será un cursor -crsCliente- en base a la tabla "Clientes" y este lo podemos crear en el método OpenTables del DataEnvironment del form. Debemos hacerlo ANTES de que se inicialize el objeto GRID, de lo contratrio aparecería como un cuadro en blanco. Código para el método OpenTables del DE: CREATE CURSOR crsCLIENTE ; (fecha_ins D, clave C(10), nombre C(60)) Es importante hacer notar que los campos del cursor deben coincidir en nombre y longitud con aquéllos de la tabla que es origen de datos para facilitar el SELECT. Ahora, podemos definir valores por default para ambos TextBox, que llamaremos txtFechaIni y txtFechaFin, respectivamente. Esto lo haríamos en el Init de cada objeto o bien en el Init del Form. Por último agregaríamos un Commandbutton que se encargue de actualizar los datos -cmdRefresh- y en su método Click pondríamos el siguiente código: ldFechaIni = THISFORM.txtFechaIni.Value ldFechaFin = THISFORM.txtFechaFin.Value * OJO! Podríamos validar fechas aquí. Ejemplo: IF ldFechaIni > ldFechaFin MESSAGEBOX("Rango de fechas inválido.") * No ejecutar consulta. RETURN 0 ENDIF * No hay problemas con las fechas... SELECT fecha_ins, clave, nombre ; FROM CLIENTES ; WHERE fecha_ins > = ldFechaIni AND fecha_ins < = ldFechaFin ; ORDER BY fecha DESC ; INTO CURSOR crsTEMP * Tenemos ahora los datos en un cursor de * paso pasémoslos al GRID... SELECT crsCLIENTE * Borramos los registros de la consulta anterior... ZAP * Y agregamos los de la nueva APPEND FROM DBF('crsTEMP') * Nos posicionamos en el primer registro GO TOP * Cerramos el cursor de paso USE IN crsTEMP * Y actualizamos el Form THISFORM.Refresh Es todo. ¿Porqué usar un cursor de paso en el SELECT SQL y no directamente el de origen? Porque al hacer eso, se volvería a generar el cursor crsCLIENTE, el GRID perdería su RecordSource y entonces se mostraría como un cuadro en blanco -sin RecordSource al cual hacer referencia-. Saludos.