Fecha actual Lun Dic 23, 2024 6:28 pm

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 7 mensajes ] 
Autor Mensaje
NotaPublicado: Mié Jul 30, 2014 11:36 am 

Registrado: Jue Nov 03, 2005 7:20 pm
Mensajes: 132
Ubicación: Teruel(España)
Hola, gente como va el verano?

Finalmente estoy migrando a la versión 3, lleva unos controles más estrictos, métodos duplicados que en la v2 no daba problema ahora avisa del error, se soluciona y punto.
Sin embargo tenia puesto un control de comprobar antes de grabar si el registro estaba bloqueado y ahora no funciona.

DO WHILE .NOT. ( lRLock := RLock() )
IF MessageDLG("El registro esta bloqueado", mtConfirmation, mbYesNoCancel) == mrYes
EXIT
ENDIF
ENDDO
IF lRLock
....operación de actualizar el registro
Con la v2 ni se veía la pantalla, ahora siempre aparece como bloqueado, y además la variable lRlock no toma el valor .T. y al pulsar Aceptar, no graba
¿se os ocurre que hago mal?
Gracias


Arriba
 Perfil  
Responder citando  
NotaPublicado: Vie Ago 01, 2014 8:10 am 
Avatar de Usuario

Registrado: Mar Dic 27, 2005 2:58 pm
Mensajes: 77
Hola, yo utilizo en vez de RLock la función DBRLock que permite especificar si bloqueo el registro actual y elimina los bloqueos existentes o en caso contrario mantiene los actuales bloqueos en el área de trabajo. Es muy útil si quieres bloquear varios registros a la vez sin tener que bloquear el archivo completo. Yo no he notado ningún cambio distinto en el comportamiento de los bloqueos con respecto a la versión 2. Tu código no parece contener errores, salvo que usas un diálogo con tres botones y solo procesas el botón mrYes.


Arriba
 Perfil  
Responder citando  
NotaPublicado: Lun Ago 04, 2014 12:06 pm 

Registrado: Jue Nov 03, 2005 7:20 pm
Mensajes: 132
Ubicación: Teruel(España)
Hola Alberto
Gracias por tu respuesta, la estoy probando.
Lo que pretendo es que si hay una concurrencia en un registro el programa espere, el MessageDlg, no está bien construido, sin embargo con la V2 hacía lo que pretendía, esta version es mas extricta y como ya indicaba arriba errores que la v2 no detectaba esta si.
Seguiré dando vueltas

Saludos


Arriba
 Perfil  
Responder citando  
NotaPublicado: Mié Ago 06, 2014 12:41 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
amable escribió:
Hola, gente como va el verano?

Finalmente estoy migrando a la versión 3, lleva unos controles más estrictos, métodos duplicados que en la v2 no daba problema ahora avisa del error, se soluciona y punto.
Sin embargo tenia puesto un control de comprobar antes de grabar si el registro estaba bloqueado y ahora no funciona.

DO WHILE .NOT. ( lRLock := RLock() )
IF MessageDLG("El registro esta bloqueado", mtConfirmation, mbYesNoCancel) == mrYes
EXIT
ENDIF
ENDDO
IF lRLock
....operación de actualizar el registro
Con la v2 ni se veía la pantalla, ahora siempre aparece como bloqueado, y además la variable lRlock no toma el valor .T. y al pulsar Aceptar, no graba
¿se os ocurre que hago mal?
Gracias


Hola!!!!

Amable, yo NO tengo problemas con las tablas. El trozo de código no parece tener problemas... EXCEPTO si damos por correcto que estas en el área de trabajo correcto.

Yo para los bloqueos utilizo esta función para cada tabla:

// ============================================================================
// BloquearCondicion, 09.06.2013 18:37
// ============================================================================

FUNCTION BloquearCondicion( lMsg ) AS LOGICAL
RETURNIF DbRLock() WITH True
IF_NIL lMsg IS True
IF lMsg
MessageDlg( "IMPOSIBLE BLOQUEAR REGISTRO DE CONDICIONES." + CRLF +;
"Seguramente esté siendo utilizado por otro usuario.", mtError, mbOk )
ENDIF
RETURN False

Y la llamo así:

IF ( waCondiciones )->( BloquearCondicion() )
...
ENDIF

Creo que no necesita explicación.

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
NotaPublicado: Mié Nov 12, 2014 1:06 am 

Registrado: Jue Nov 03, 2005 7:20 pm
Mensajes: 132
Ubicación: Teruel(España)
Hola a todos

Inicie este posts y lo resuelvo, porque el error no estaba en el control de los bloqueos, sino en algo que es obvio:
Para que bloquear un registro si la tabla se ha abierto en modo exclusivo?, en la V2 no lo tenia en cuenta la V3 no bloquea un registro si la tabla se ha abierto exclusiva.

Gracias a todos

Bueno y que queria decir algo, parece que ultimamente estamos muy callados.

Salduso


Arriba
 Perfil  
Responder citando  
NotaPublicado: Jue Nov 13, 2014 12:36 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
Yo modifiqué mi rutina de bloqueo asi:

FUNCTION NetRecordLock( xIdentity )

LOCAL lSuccess AS LOGICAL

lSuccess := True
IF DbInfo( DBI_SHARED )
IF ! ( lSuccess := DBRLock( xIdentity ) )
WHILE ! ( lSuccess := DBRLock( xIdentity ) )
IF MessageDlg( "REGISTRO BLOQUEADO." + CRLF +;
"Archivo: " + ExtractFileName( DbInfo( DBI_FULLPATH ) ) + CRLF +;
"Alias: " + Alias() + CRLF +;
"Area: " + LTrim( Str( Select(), 4, 0 ) ) + CRLF + CRLF +;
"їReintentar el acceso?", mtConfirmation, mbYesNo ) == mrNo
EXIT
ENDIF
END
ENDIF
ENDIF

RETURN lSuccess

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
NotaPublicado: Vie Nov 21, 2014 1:46 pm 

Registrado: Jue Nov 03, 2005 7:20 pm
Mensajes: 132
Ubicación: Teruel(España)
Hola Jesús

Muy bien, primero preguntas si esta compartido y si da .T. entonces intentas bloquear

Gracias


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 7 mensajes ] 

Todos los horarios son UTC + 1 hora [ DST ]


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a: