FoxPro/Visual FoxPro - Seleccionar varios registros desde un grid VFP

 
Vista:
sin imagen de perfil

Seleccionar varios registros desde un grid VFP

Publicado por jorge (6 intervenciones) el 30/05/2017 07:16:19
Buenas noches estimados, mi consulta es la siguiente.

Tengo un grid en un formulario, en el entorno de datos utilizo varias tablas, los datos que aparecen en el grid son de la tabla accesos(pantallas), pero quiero que al presionar el botón guardar pues guarde esos datos en la tabla permisos, el inconveniente es que solo me guarda el registro que aparece seleccionado en el grid del formulario no todos los registros del grid, para que me los guarde observe que tengo que ejecutar el formulario y cada vez situarme en diferentes registros, mi consulta es.. Puedo seleccionar todos los registros de este grid y como? sino se puede que opción tengo para almacenar los accesos en la tabla permisos?
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
sin imagen de perfil
Val: 1.374
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Seleccionar varios registros desde un grid VFP

Publicado por Fidel José (642 intervenciones) el 30/05/2017 14:16:11
1) Para seleccionar varios registros en un control grid necesitas crear un método de selección. O sea, necesitarás tener un campo en la tabla o cursor del grid para registrar la marca (que puede ser un campo boolean o integer, según el gusto). La columna del grid que muestre ese campo deberá estar readonly = .f.. También puedes incluir un botón para seleccionar todos.
2) En cuanto a "guarde esos datos", acá tenemos un problema. Los datos están contenidos en campos de un cursor o una tabla, de donde dependerá de la estructura de las tablas para determinar el modo en que pueden pasarse.

La estrategia pasa siempre por generar un cursor con los datos marcados. Supongamos que el campo de la marca se llama "Mark" y es un boolean:

SELECT * FROM (thisform.grid1.recordsource) WHERE Mark INTO CURSOR curPase

a) Si los campos de ambas tablas tienen los mismos nombres y propiedades, aunque el orden de los campos no sea el mismo:
SELECT permisos
append from dbf("curpase")
USE IN CURPASE

b) Si los campos de ambas tablas no tienen los mismos nombres o, teniendo los mismos nombres difieren las propiedades (tipo de campo, ancho, decimales), tendrás que hacer una transformación manual de modo que los parámetros de la cláusula VALUES resulten aceptables por la tabla de destino.
SELECT CURPASE
SCAN
INSERT INTO PERMISOS (campo1,campo2,campo3) VALUES (curpase.campoX1,curpase.CampoX2, curpase.Campox3)
ENDSCAN
USE IN CURPASE

Solamente para un ejemplo, supongamos que ambas tablas tienen un campo llamado Fecha, pero en la tabla del grid es tipo "D" y en la tabla permisos es C(10)
SELECT CURPASE
SCAN
INSERT INTO PERMISOS (Fecha,campo2,campo3) VALUES (transform(curpase.fecha),curpase.CampoX2, curpase.Campox3)
ENDSCAN
USE IN CURPASE

c) Si los campos de ambas tablas no coinciden en todos los nombres pero tienen la característica de estar exactamente en el mismo orden y con las mismas propiedades, se puede apelar a:
SELECT curPase
SCAN
SCATTER TO laDatos
INSERT INTO permisos FROM ARRAY laDatos
ENDSCAN
USE IN CURPASE
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