FoxPro/Visual FoxPro - problema con grid sale en blanco

   
Vista:

problema con grid sale en blanco

Publicado por JoseGomez (48 intervenciones) el 26/01/2014 21:38:00
hola, tengo 3 formularios cada uno su gird y se cargan con la informacion de sus tablas.
RecordSource=Tabla
RecordSourceType=1
Todo me funciona bien.
Pero resulta que si hago click dentro de un gird y luego me cambio a otro formulario que tenga otro grid (atravez del menu), este otro formulario me viene con el gird en blanco.
Alguien sabe que pase o como se puede solucionar?
nota: Esto solo sucede si hago con click en un gird antes de cambiarme a otro formulario.
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

problema con grid sale en blanco

Publicado por Fidel José (558 intervenciones) el 27/01/2014 15:43:42
Evidentemente cierras la tabla cuando cierras el formulario. Por más que vuelvas a abrir la tabla y esté disponible, te falta el paso de volver a ligarla.
Una solución es abrir en cada form la tabla con AGAIN y un Alias diferente, asignado en cada formulario

Recomendación del maestro Fernando D. Bozzo (http://fdbozzo.blogspot.com.es/)

Dos o más formularios usando la misma tabla
Esta es una situación muy habitual, tener varios formularios que usan la misma tabla simultáneamente y hasta puede que con distintos índices en cada sitio, pero compartiendo los mismos datos.

Una forma de poder aprovechar esos datos e independizarse de qué haga el resto del sistema con ella es esta:

1
2
3
4
5
* Form Clientes usando la tabla Precios
USE PRECIOS SHARED AGAIN ALIAS cli_PRECIOS
 
* Form Proveedores usando la tabla Precios
USE PRECIOS SHARED AGAIN ALIAS prv_PRECIOS

En cada formulario, te refieres a las tablas por el alias correspondiente. Cada form cerrará su versión (alias) de la tabla y no generará problemas con los otros formularios.
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

problema con grid sale en blanco

Publicado por neo (1601 intervenciones) el 28/01/2014 02:43:23
Es mejor que desde el init del formulario carges mediante codigo el grid y la tabla a la cual tendrá relación, de esa manera te servirá si en tiempo de ejecución puedas consultar y cambiar los datos a mostrar sin que se presente problemas en tu grid.

por ejemplo:

en el evento init del form:
Thisform.grid1.recorsource='mi_tabla'
thisform.grid1.refresh

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

problema con grid sale en blanco

Publicado por Fidel José (558 intervenciones) el 28/01/2014 16:17:28
Bien Neo, yo tengo una rutina de configuración del control grid que se corre siempre desde el Init del form. También se puede convocar desde cualquier sitio, por eso no la escribo en el Init, sino en un método de usuario.

A mi no me resulta clara la secuencia que describe José. No sé si los tres formularios están abiertos (y para qué usaría el menú?). Al hacer click en un grid, lo que suceda, dependerá de la configuración de AllowCellSelection. Tal vez haya puesto algún código en AfterRowColChange.

De todos modos, el problema es que la tabla en algún momento se cierra y se desenlaza del grid.
Pensando, puede ocurrir que esté trabajando en modo exclusivo y en algún momento haga un PACK a la tabla asociada al grid del otro formulario. El comando PACK desenlaza el grid porque cierra la tabla. Eso surge de cómo opera el comando:
When you use PACK, Microsoft Visual FoxPro copies all records not marked for deletion to a temporary table. After PACK is finished executing, Visual FoxPro deletes the original table from disk and renames the temporary table with the original table name.

Por ejemplo (aunque por lo dicho, no parece el caso)

USE laTabla in 0
with thisform.grid1
.RecordSource='LaTabla'
endwith
select laTabla
PACK

Esta secuencia genera que el Grid aparezca vacío, aún cuando conserve su relación. Pero el objeto cursor desapareció porque la tabla se cerró.

Esto que sigue (no es recomendable) pero no causará ese efecto, porque después del PACK (si fué existoso) la tabla estará abierta.
USE laTabla in 0
select laTabla
PACK
with thisform.grid1
.RecordSource='LaTabla'
endwith
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