Controlar un grid cuando ejecuto el comando DELETE y PACK

1,833 views
Skip to first unread message

pepe nievas

unread,
Jan 7, 2012, 2:11:25 PM1/7/12
to Comunidad de Visual Foxpro en Español
Hola de vuelta foreros...
Alguien sabe que le sucede a mi grid que cuando borro un registro se
muestra totalmente blanco sin datos ni columnas ni nada nada?
el grid esta vinculado con una tabla y me esta mostrando cada segundo
el registro que indica el cursor, pero al borrar uno me sucede eso.

Fabricio

unread,
Jan 7, 2012, 2:19:25 PM1/7/12
to Comunidad de Visual Foxpro en Español
Tendriamos que ver el codigo donde eliminas el registro para detectar
que te esta sucediendo.

Saludos

Fabricio

pepe nievas

unread,
Jan 7, 2012, 3:57:02 PM1/7/12
to Comunidad de Visual Foxpro en Español
FABRICIO MI CODIGO ES...


DELETE
PACK

SALUDOS

Yvan Carranza

unread,
Jan 7, 2012, 3:58:31 PM1/7/12
to publice...@googlegroups.com
antes de hacer un pack.. desenlanza al grid del cursor o tabla..  y luego vuelvelo a enlazarlo. y su respectivo refresh

pepe nievas

unread,
Jan 7, 2012, 4:06:20 PM1/7/12
to Comunidad de Visual Foxpro en Español
EL NAME DEL GRID ES GRDNAT
SERIA ALGO ASI?

DELETE
THISFORM.GRDNAT.COLUMN1.CONTROLSOURCE=""
THISFORM.GRDNAT.COLUMN2.CONTROLSOURCE=""
PACK
THISFORM.GRDNAT.COLUMN1.CONTROLSOURCE="MITABLA.CAMPO."
THISFORM.GRDNAT.COLUMN2.CONTROLSOURCE="MITABLA.CAMPO."
THISFORM.REFRESH

ALGO ASI?
O SEA AHY ESTOY DESENLAZANDO MI GRID?

pepe nievas

unread,
Jan 7, 2012, 4:07:56 PM1/7/12
to Comunidad de Visual Foxpro en Español
O DEBO MODIFICAR EL RECORDSOURCE DEL GRID

Yvan Carranza

unread,
Jan 7, 2012, 4:10:36 PM1/7/12
to publice...@googlegroups.com
El recordsource del grid,.
osea
migrid.recordsource = ""
delete
pack
etc
migrid.recordsource = "mitabla"
migrid.refresh

pepe nievas

unread,
Jan 7, 2012, 4:22:25 PM1/7/12
to Comunidad de Visual Foxpro en Español
mira intente tu codigo y me quedo asi

migrid.recordsource = ""
delete
pack
migrid.recordsource = "mitabla"
migrid.refresh

pero como no me reconoce el objeto mi grid lo hice asi

thisform.migrid.recordsource = ""
delete
pack
thisform.migrid.recordsource = "mitabla"
thisform.migrid.refresh

asi lo reconoce....
pero sigo con el mismo problema, mi grid desaparece y queda el cuadro
del grid todo blanco..

Yvan Carranza

unread,
Jan 7, 2012, 4:24:26 PM1/7/12
to publice...@googlegroups.com
lo de migrid.. solo fue un ejemplo.. en mi tabla.. debes poner el nombre de tu tabla o cursor que estas actualizando.

pepe nievas

unread,
Jan 7, 2012, 5:16:16 PM1/7/12
to Comunidad de Visual Foxpro en Español
Si ya se Yvan, yo puse el name de mi grid y el nombre de mi tabla

Carlos Alberto Cisneros Madrid

unread,
Jan 7, 2012, 5:30:13 PM1/7/12
to publice...@googlegroups.com
No sabia que se podia usar la orden pack, a mi siempre me emite el error "debe abrirse en modo exclusivo"

pepe nievas

unread,
Jan 7, 2012, 6:38:42 PM1/7/12
to Comunidad de Visual Foxpro en Español
listo quedo me faltaba una comilla jeje


thisform.grdnat.recordsource = ""
delete
pack
thisform.grdnat.recordsource = "individuos"

TheNewInquirer

unread,
Jan 8, 2012, 1:37:01 AM1/8/12
to Comunidad de Visual Foxpro en Español
Amigazo, tu problema es que estás suponiendo que debes hacer un pack o
un borrado definitivo de los registros del grid.

Te explico: EN LA VIDA REAL, no usas el PACK O EL ZAP JAMAS!...

Debes configurar el comando SET DELETE ON para que omita mostrar los
registros recien borrados.

Dichos registros no deben borrarse de la base de datos por cuestiones
de seguridad o respaldo. Solamente estarán MARCADOS para borrar, pero
serán invisibles al usuario por la configuración de la orden SET
DELETE. que deberás colocar en tu main.prg o en el evento init o load,
sino mal recuerdo. (uno de esos dos es).

Bueno.. en la vida real... Cuando llegue el momento de "Compactar y
Reindexar tu base" para que no esté inflada con registros basura,
debes tener una opción en tu menu de Utilerias, que abra las bases en
modo exclusivo y haga el ZAPEO O EMPACADO DE TODOS LOS REGISTROS
MARCADOS PARA BORRAR Y LUEGO REINDEXE TODO.

En el ejemplo mas basico es algo como:

SET EXCLUSIVE ON
USE BASEUNO.PRG EXCLUSIVE
ZAP
REINDEX

Para ello, EN LA VIDA REAL, si estas trabajando en una red con varios
clientes conectados, el administrador debio haber mandado un mensaje
pidiendo a medio mundo que SALGAN DEL SISTEMA DE FOX o si no quieren,
PURGAR a todos los usuarios conectados. Luego se corre el proceso de
compactar y reindexar.

Para que no se te destruya el grid, carga el grid en un area d
trabajo, y y ponla en uso desde el inicio en el evento LOAD o init
(uno de esos funciona de seguro).

Algo como:
SET EXCLUSIVE OFF
SELECT 3
USE BASEUNO

Luego solo haz que tu grid aparezca y desaparezca, con la propiedad
visible del formulario.

OLVIDATE DEL PACK. Eso no se usa en el plano real, hasta que llega el
momento de borrar datos, pero por seguridad de la información, eso no
se hace cada que borras un registro amigazo!!

J. Enrique Ramos Menchaca

unread,
Jan 8, 2012, 2:39:26 AM1/8/12
to Comunidad de Visual Foxpro en Español
Añadiendo a la informacion que ya fue proporcionado, lo que sucede es
que el comando Pack, despues de eliminar definitivamente los registros
marcados como borrados, cierra la tabla para regenerar los indices, y
tu grid pierde su recordsource, es por eso que debes quitarle el
recordsource y volverlo a definir una vez realizado el mismo.

Esta mejor explicado en el siguiente articulo el comportamiento que te
realiza el grid.

http://www.tek-tips.com/faqs.cfm?fid=937

Espero te sea de utilidad.

pepe nievas

unread,
Jan 8, 2012, 12:39:33 PM1/8/12
to Comunidad de Visual Foxpro en Español

Thennexinquirer y Enrique muchas gracias por su respuesta.
Mi formulario va a ser una sencilla y huimilde aplicacion la cual se
va a usar en una sola pc, por solo dos personas. La funcionalidad va a
ser la carga de datos de familias que acuden a la asistencia social.
Solo se va limitar a la consulta, la carga, las bajas y modificaciones
de los datos de estos individuos. Para agilizar el trabajo de estas
dos personas que deben buscar entre mil carpetas (mas haya que esten
archivadas de forma ordenada) cuantos hijos tienen o que beneficios
perciben o cual es la fecha del primer informe socioeconomico.
En estos dos meses aprendi un monton. Habia estado en Visual Basic 6.0
dos meses realizando este formulario pero no pude avanzar mucho. Lo
unico que rescato es que generaba un formulario como si estuviera
guardando un archivo word en mi pc.
Ahora terminado esto me doy cuenta que debo hacer un programa para
generar este formulario y que la cosa es diferente a visual basic en
este sentido. Lo genere con el sistente de aplicacion, pero en la
ultima parte despues de todo me dice que me faltan las librerias de
vfp 9. Donde las busco?Cuales son las que debo usar?

edgar suarez kummers

unread,
Jan 8, 2012, 1:06:34 PM1/8/12
to publice...@googlegroups.com
Las librerías:

Bajarlas de:

http://www.gestpyme.cl/ES/menumain.php

suerte

edgar
--
edgar suarez kummers

Alfonso Arias Lemas

unread,
Jan 9, 2012, 5:54:30 AM1/9/12
to publice...@googlegroups.com
no hagas el PACK, utiliza SET DELETE ON y salta mueve el puntero del registro para delante o para atras.

Irlandes 1960

unread,
Jan 9, 2012, 7:13:29 AM1/9/12
to publice...@googlegroups.com
NO.  PAREN LAS ROTATIVAS
No deberías trabajar para nada con el comando DELETE
¿esa familia no viene más? ¿cambio el grupo familiar?
Pone un campo FECHA DE BAJA y la baja se hace asignando DATE() a ese campo, el cual es INDICE de la tabla.
Eso te da la funcionalidad de poder filtrar las consultas a solos los activos "empty(fechabaja)", pero también a mostrar solo las familias dadas de baja "!empty(fechabaja)",  o juntar ambos casos para ver completo el universo de familiar que acudieron a la asistencia social, y por cual periodo incluyendo una columna con la fecha de baja, e incluso la oportunidad de equivocarse y rehabilitar el registro simplemente vaciando el campo de fecha de baja.
Podes agregar que en la grilla, si se muestran las bajas, que aparezcan con fondo gris, usando la propiedad dynamicbackcolor, algo asi como 
thisform.grdgral1.setall('dynamicbackcolor','iif(!empty(fechabaja),rgb(192,192,192),rgb(255,255,255))','column')
Tené como norma de diseño, NUNCA se elimina información del sistema, la información NUNCA desaparece, se la filtra para que no se vea.

Walter R. Ojeda Valiente

unread,
Jan 9, 2012, 7:31:59 AM1/9/12
to publice...@googlegroups.com
Muy buen consejo, aunque hay que matizar algo. Lo que nunca debe borrarse es lo que se usó, pero si un registro jamás fue usado entonces (generalmente) no hay problema en borrarlo permanentemente.

Saludos.

Walter.




Date: Mon, 9 Jan 2012 09:13:29 -0300
Subject: Re: [vfp] Re: Controlar un grid cuando ejecuto el comando DELETE y PACK
From: irland...@gmail.com
To: publice...@googlegroups.com

Fabricio

unread,
Jan 9, 2012, 10:38:47 AM1/9/12
to Comunidad de Visual Foxpro en Español
Bueno amigo, a como ya te lo dijeron, el problema es que al ejecutar
el Pack se cierra la tabla y se vuelve a abrir, por lo tanto
desaparece el rowwource como consecuencia se pierde el formato del
grid.

Una solución es poner el ThisForm.miGrid.Rowsource=""
Luego el Pack
y luego restableces el RowSource

Otra solución es que hagas el Pack hasta que cierres el formulario.

Saludos

Fabricio
Reply all
Reply to author
Forward
0 new messages