Bloquear registro en SQL

01/11/2009 - 12:26 por hector | Informe spam
Hola grupo, tengo la necesidad de bloquear un registro, el bloqueo sera por
un tiempo determinado por el usuario desde que capture el registro, hatsa
que que de aceptar.
Trato de utilizar:
msg=SQLEXEC(gnConnHandle, "select * from mitabla with(HOLDLOCK, ROWLOCK)
where id_docum=?mserial","ctem")
No me funciona, el codigo es Transac_SQL con Fox, gracias por su ayuda.

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
02/11/2009 - 10:25 | Informe spam
¿Tienes un índice sobre el campo id_docum?

En todo caso, no es buena idea mantener el bloqueo "hasta que el usuario de
aceptar". Imagínate que se va a tomar un café, o se olvida de darle a
aceptar, o bloquea la pantalla porque tiene que ir a hacer otra cosa...

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"hector" wrote in message
news:
Hola grupo, tengo la necesidad de bloquear un registro, el bloqueo sera
por un tiempo determinado por el usuario desde que capture el registro,
hatsa que que de aceptar.
Trato de utilizar:
msg=SQLEXEC(gnConnHandle, "select * from mitabla with(HOLDLOCK, ROWLOCK)
where id_docum=?mserial","ctem")
No me funciona, el codigo es Transac_SQL con Fox, gracias por su ayuda.


Respuesta Responder a este mensaje
#2 hector
02/11/2009 - 11:30 | Informe spam
Gracias por tu respuesta, efectivamente se que existe ese riesgo y ya
explique a mi cliente.
Lo que ellos quieren es por ejemplo en un documento cabecera y detalle,
blockear la cabecera cuando se quiera modificar.
El comando que describi se deja ejecutar en dos seciones distintas, la idea
es que el que ingresa segundo no pueda ejecutarlo y enviarle algun mensaje.
Con las dos seciones activas, cuando intento hacer el UPDATE desde el que
ingreso segundo se queda colgado hasta que el primero salga, para finalmente
tomar el valor del que ingreso segundo y eso es lo que no quiere el cliente.

HQD


"Carlos Sacristan" escribió en el mensaje
news:
¿Tienes un índice sobre el campo id_docum?

En todo caso, no es buena idea mantener el bloqueo "hasta que el usuario
de aceptar". Imagínate que se va a tomar un café, o se olvida de darle a
aceptar, o bloquea la pantalla porque tiene que ir a hacer otra cosa...

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"hector" wrote in message
news:
Hola grupo, tengo la necesidad de bloquear un registro, el bloqueo sera
por un tiempo determinado por el usuario desde que capture el registro,
hatsa que que de aceptar.
Trato de utilizar:
msg=SQLEXEC(gnConnHandle, "select * from mitabla with(HOLDLOCK, ROWLOCK)
where id_docum=?mserial","ctem")
No me funciona, el codigo es Transac_SQL con Fox, gracias por su ayuda.





Respuesta Responder a este mensaje
#3 Carlos Sacristan
02/11/2009 - 11:57 | Informe spam
Sigo pensando que es muy mala práctica lo que estás intentando hacer.
Existen soluciones alternativas que permiten la concurrencia en la base de
datos, que es uno de los objetivos a conseguir cuando se trabaja con ellas.

Te recomiendo la lectura de un hilo en este mismo grupo de primeros de año
que trata justamente un problema muy similar al tuyo:
http://groups.google.es/group/micro...7c17726751
En especial, esta respuesta de Jesús López (SQL Ranger)
http://groups.google.es/group/micro...3aa2f65b6,
seguro que te sirve de gran ayuda.


"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"hector" wrote in message
news:
Gracias por tu respuesta, efectivamente se que existe ese riesgo y ya
explique a mi cliente.
Lo que ellos quieren es por ejemplo en un documento cabecera y detalle,
blockear la cabecera cuando se quiera modificar.
El comando que describi se deja ejecutar en dos seciones distintas, la
idea es que el que ingresa segundo no pueda ejecutarlo y enviarle algun
mensaje.
Con las dos seciones activas, cuando intento hacer el UPDATE desde el que
ingreso segundo se queda colgado hasta que el primero salga, para
finalmente tomar el valor del que ingreso segundo y eso es lo que no
quiere el cliente.

HQD


"Carlos Sacristan" escribió en el mensaje
news:
¿Tienes un índice sobre el campo id_docum?

En todo caso, no es buena idea mantener el bloqueo "hasta que el usuario
de aceptar". Imagínate que se va a tomar un café, o se olvida de darle a
aceptar, o bloquea la pantalla porque tiene que ir a hacer otra cosa...

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"hector" wrote in message
news:
Hola grupo, tengo la necesidad de bloquear un registro, el bloqueo sera
por un tiempo determinado por el usuario desde que capture el registro,
hatsa que que de aceptar.
Trato de utilizar:
msg=SQLEXEC(gnConnHandle, "select * from mitabla with(HOLDLOCK, ROWLOCK)
where id_docum=?mserial","ctem")
No me funciona, el codigo es Transac_SQL con Fox, gracias por su ayuda.









Respuesta Responder a este mensaje
#4 hquinones
02/11/2009 - 13:45 | Informe spam
Gracias nuevamente, leere con detenimiento y luego comento.

HQD

"Carlos Sacristan" escribió en el mensaje
news:%
Sigo pensando que es muy mala práctica lo que estás intentando hacer.
Existen soluciones alternativas que permiten la concurrencia en la base de
datos, que es uno de los objetivos a conseguir cuando se trabaja con
ellas.

Te recomiendo la lectura de un hilo en este mismo grupo de primeros de año
que trata justamente un problema muy similar al tuyo:
http://groups.google.es/group/micro...7c17726751
En especial, esta respuesta de Jesús López (SQL Ranger)
http://groups.google.es/group/micro...3aa2f65b6,
seguro que te sirve de gran ayuda.


"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"hector" wrote in message
news:
Gracias por tu respuesta, efectivamente se que existe ese riesgo y ya
explique a mi cliente.
Lo que ellos quieren es por ejemplo en un documento cabecera y detalle,
blockear la cabecera cuando se quiera modificar.
El comando que describi se deja ejecutar en dos seciones distintas, la
idea es que el que ingresa segundo no pueda ejecutarlo y enviarle algun
mensaje.
Con las dos seciones activas, cuando intento hacer el UPDATE desde el que
ingreso segundo se queda colgado hasta que el primero salga, para
finalmente tomar el valor del que ingreso segundo y eso es lo que no
quiere el cliente.

HQD


"Carlos Sacristan" escribió en el mensaje
news:
¿Tienes un índice sobre el campo id_docum?

En todo caso, no es buena idea mantener el bloqueo "hasta que el usuario
de aceptar". Imagínate que se va a tomar un café, o se olvida de darle a
aceptar, o bloquea la pantalla porque tiene que ir a hacer otra cosa...

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"hector" wrote in message
news:
Hola grupo, tengo la necesidad de bloquear un registro, el bloqueo sera
por un tiempo determinado por el usuario desde que capture el registro,
hatsa que que de aceptar.
Trato de utilizar:
msg=SQLEXEC(gnConnHandle, "select * from mitabla with(HOLDLOCK,
ROWLOCK) where id_docum=?mserial","ctem")
No me funciona, el codigo es Transac_SQL con Fox, gracias por su ayuda.












Respuesta Responder a este mensaje
#5 Ricardo Passians
02/11/2009 - 23:08 | Informe spam
Esa idea está muy mal para una aplicación.

Ricardo Passians

"hector" escribió en el mensaje
news:
Hola grupo, tengo la necesidad de bloquear un registro, el bloqueo sera
por un tiempo determinado por el usuario desde que capture el registro,
hatsa que que de aceptar.
Trato de utilizar:
msg=SQLEXEC(gnConnHandle, "select * from mitabla with(HOLDLOCK, ROWLOCK)
where id_docum=?mserial","ctem")
No me funciona, el codigo es Transac_SQL con Fox, gracias por su ayuda.


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida