Bloqueo de registro en vista remota MySql

118 views
Skip to first unread message

Carlos Yohn (A.G.P.)

unread,
Apr 12, 2011, 4:24:44 AM4/12/11
to Comunidad de Visual Foxpro en Español
Hola,
Necesito bloquear un registro de una tabla de MySql a través de una
vista remota.
Lo consigo, pero solo si modifico algún dato. Me gustaría poder
bloquear (y/o comprobar el bloqueo) el registro antes de modificar
nada.
El código de prueba que estoy usando es el siguiente:

close data all
open database datos

use datos!prueba
cursorsetprop("Buffering", 5, "prueba")

select prueba
locate for codigo = "_36U0HZPIJ"
if !found("prueba")
return
endif

sqlsetprop(CURSORGETPROP('connecthandle', "prueba"), 'Transactions',
2)

begin transaction
replace prueba.localizacion with prueba.localizacion in prueba && esta
es la instrucción que me gustaría evitar
do while !tableupdate(.f., .t., "prueba")
wait window "esperando a que se desbloquee el registro..." nowait
timeout 1
enddo
wait clear

app.mess("registro bloqueado por mí" + chr(13) + "Esperando ...")

replace prueba.localizacion with sys(2015) in prueba
do while !tableupdate(.f., .t., "prueba")
wait window "esperando a que se desbloquee el registro..." nowait
timeout 1
enddo
wait clear
end transaction

app.mess("registro modificado y actualizado")

sqlcommit(CURSORGETPROP('connecthandle', "prueba"))

Mauricio Molinero,

unread,
Apr 12, 2011, 3:28:33 PM4/12/11
to Comunidad de Visual Foxpro en Español
Hola Carlos, fijate esto al momento de consultar podes pedir

SELECT ........ FOR UPDATE | LOCK IN SHARE MODE

http://dev.mysql.com/doc/refman/5.0/es/innodb-locking-reads.html

Saludos!

Mauricio R. Molinero,

Carlos Yohn (A.G.P.)

unread,
Apr 12, 2011, 5:32:59 PM4/12/11
to Comunidad de Visual Foxpro en Español
Gracias Mauricio. Es de mucha utilidad.
Veo el problema de que esto no puede implementarse en vistas remotas.
¿no?
Y, si se pudiera, bloquearía todos los registros de la vista... habría
que hacer una vista parametrizada que solo devolviera el registro a
modificar. O bien actualizar siempre a través de sqlexec en lugar de
utilizar vistas.
Por otro lado, ¿cómo se desbloquea? ¿simplemente cerrando el cursor
obtenido?

Saludos,

Mauricio Molinero,

unread,
Apr 12, 2011, 5:49:43 PM4/12/11
to Comunidad de Visual Foxpro en Español
No estoy seguro cuando desbloquea ya que no lo he utilizado, supongo
que si al cerrar el cursor, terminar la transaccion, etc.

Lo que si me pregunto es porque quieres bloquear registros y esperar
al usuario? No creo que sea conveniente hacer eso. Incluso todos estos
inmensos sistemas DBRMS no contemplan bloqueos tan estrictos ya que
esta pensado para miles de usuarios.

Saludos!

Mauricio R. Molinero,

Carlos Yohn (A.G.P.)

unread,
Apr 14, 2011, 3:49:01 AM4/14/11
to Comunidad de Visual Foxpro en Español
No te entiendo bien. Me parece importante bloquear 'ciertos' registros
cuando un usuario los quiere modificar. Para evitar que el último que
modifica se 'cargue' lo que ha hecho el anterior.
En nuestro propio fox, esto se realiza de manera automática con buffer
o transacciones.
Reply all
Reply to author
Forward
0 new messages