FoxPro/Visual FoxPro - Problemas con un Form

 
Vista:
sin imagen de perfil

Problemas con un Form

Publicado por Victor Perez (278 intervenciones) el 11/08/2010 01:10:58
Estimados amigos,

Manejo la agenda de citas medicas para especialista mediante un formulario sencillo.

Cuando se desea abrir una cita para un dia especifico y ese dia no hay citas programadas el sistema pregunta si DESEA o NO abrir un Esquema de Citas para la fecha indiciada por el usuario.

Si se dice "Si" bueno, abre citas en Blanco con los horarios correspondientes. Si se dice NO simplemente termina la ejecucion del Formulario.

Ahora bien, Si se coloca una fecha para la cual ya hay un esquema de Citas programadas entonces lo muestra en un GRID mediante el siguiente codigo

* Almcitas ya es un Alias Abierta

Select * from Almcitas where fecha=this.value order by fecha into table _citas

Sele _Citas

Thisform.PgfFicha.Page1.Grid1.Recordsource="_Citas"
Thisform.PgfFicha.Page1.Grid1.Column1.enabled=.F.
Thisform.PgfFicha.Page1.Grid1.Column2.enabled=.F.
Thisform.PgfFicha.Page1.Grid1.Column8.txtCodigo.setfocus

Hasta aqui todo bien.

Cuando dos usuarios traten de colocar citas es decir, usar el mismo modulo, el 2do usuario no debe poder acceder al esquema de citas para programar nuevas citas hasta que el 1er usuario no suelte el Formulario.

Para ello, en el Boton que genera las nuevas citas tengo el siguiente comando:

If used("_Citas")
MessageBox("Actualmente está en uso el Modulo de Citas. No puede tener acceso PARA CAMBIAR INFORMACION",48,"<AVISO>")
Return 0
Else
Use _Citas EXCL in 0
Sele _citas
Zap
Endif

Como veran _citas es la TABLA temporal que se abre con la informacion de las citas ya previamente establecidas.

Lo que me pasa es que no me funciona el MessageBox, es decir, a pesar de la sentencia el sistema se va al "ELSE" de este codigo y trata de abrir _citas EXCL cosa que no podra hacer porque está ya en uso por el otro usuario y entonces lista en pantalla una serie de errores (ejecutandose la rutina para atrapar errores que ya tengo establecida).

Alguna sugerencia ?

Gracias
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:Problemas con un Form

Publicado por Edgar Zambrano (31 intervenciones) el 18/08/2010 21:24:46
si tienes el formulario con sesión privada de datos pues cada vez que lo ejecute se abre una nueva sesión y por ende abre las tablas en un nuevo espacio.

lo que podrias hacer es usar otra nueva tabla con un campo switch el cual te permita verificar si fue o no abierto el formulario osea que si el primer usuario abrio el formulario reemplazas el valor del campo y desde la otra estación cuando entre a verificar encontrara el switch lleno y no entrara... algo asi

procedure init && del formulario
select tAbierto

if tAbierto.forma
*
* mensaje de información
messagebox("otro usuario se encuentra modificando los datos.",64,"Información")
*
* liberas formulario de memoria
release Thisform
*
* retorna falso para salir
return .F.
else
replace tAbierto.forma with .T.
endif

claro esta que previamente debes de haber creado la tabla fisicamente y con esa validación no te permite ingresar al formulario si otro usuario lo esta modificando.

no olvides que en el unload debes liberar el switch para que otro usuario pueda entrar en el

procedure unload
select tAbierto

replace tAbierto.forma with .f.
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
sin imagen de perfil

RE:Problemas con un Form

Publicado por victor perez (278 intervenciones) el 18/08/2010 23:19:51
Gracias por la informacion. Hare las pruebas y te avisaré si funciona.

Victor
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
sin imagen de perfil

RE:Problemas con un Form

Publicado por victor perez (278 intervenciones) el 19/08/2010 00:32:48
Estimado Edgar,

El codigo funcionó bien. El unico error es que no puedo poner lo que me pides en el unload del formulario, porque al estar el formulario en uso, se manda el mensaje y luego lo va a cerrar (unload) al liberar el form.

Asi que la forma correcta era poner ese codigo en el Salir.Click que es un boton del formulario, que se activa cuando el usuario ya quiere salir del formulario. Asi libera el form, cambia a .F. el valor del campo Tabierto.forma y permite que otro usuario pueda usar el form cuando es abandonado.

Me parece una solucion muy buena al problema.

Mil Gracias...

Mi formulario quedo asi:

En el Form.Init

Use Tabierto Shared
If tAbierto.forma
Messagebox("Otro usuario se encuentra modificando los datos.",64,"Información")
Release Thisform
Return .F.

ELSE

Replace tAbierto.forma with .T.

ENDIF

En el Salir.Click

SELECT tAbierto
Replace tabierto.forma WITH .f.
Thisform.release
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