Ayuda

18/04/2005 - 20:14 por Carlos Vargas | Informe spam
Saludos
Tengo un tabla temporal donde paso los datos de la Tabla Factura
por ejemplo editar un Nro de Factura inserto todos los datos en
esta tabla temporal de ese nro de factura mas un campo que identifica a la
maquina

Cuando otro usuario quiere ingresar a modificar esta factura el
sistema le dice q ya esta siendo editado la factura pq primero hace un
select
a esta tabla y si existe le manda un mensaje.

El problema es q si la aplicacion se cierra de forma inesperada por ejemplo
apagado de luz o finalizan la aplicacion con ctrl+alt+supr el registro en
esta tabla
queda y por ende el nro de factura queda bloqueado.

¿De que manera podria detectar q la maquina q ingreso a editar la factura ya
no se encuentra
conectado. para cuando otro usuario ingrese pueda editar los datos sin
ninguna restriccion.

Gracias
Carlos Vargas

Preguntas similare

Leer las respuestas

#1 Isaias
18/04/2005 - 23:45 | Informe spam
Bueno, sugiero que cuando esa maquina (que se salio intespectivamente) se
vuelva a "logear", lo primero es que pregunte si tiene FACTURA (registro
asignado) en edicion, de ser asi, entonces, que continue con la edicion.

Saludos.
Respuesta Responder a este mensaje
#2 Carlos Vargas
19/04/2005 - 00:38 | Informe spam
Bueno gracias por la ayuda Isaias
pense en esa solucion pero me obligaria a que otro usuario o maquina q
ejecute el programa
se vea obligado a esperar q se logee la maquina q bloque los registros, yo
me preguntaba
y si este usuario se retira?
si le manda a hacer otras labores?

ummmm no existen otras soluciones como saber cuando una comexion hace
shutdown
desde una maquina u otra solucion

Carlos Vargas


"Isaias" escribió en el mensaje
news:

Bueno, sugiero que cuando esa maquina (que se salio intespectivamente) se
vuelva a "logear", lo primero es que pregunte si tiene FACTURA (registro
asignado) en edicion, de ser asi, entonces, que continue con la edicion.

Saludos.
Respuesta Responder a este mensaje
#3 Don Roque
19/04/2005 - 15:00 | Informe spam
Antes que nada, yo trataria de solucionar esta problematica usando
bloqueos para evitar que dos usuarios editen la misma factura. Ahora
bien, tratando de encarar la solucion que vos tenes ahora andando, lo
que te recomiendo es lo siguiente:

En la base de datos MASTER tenes una tabla que se llama SYSPROCESSES
(es la que consultan los SPs de sistema SP_WHO y SP_WHO2). Usando esa
tabla, vos tenes todas las conexiones que estan abiertas contra el SQL
SERVER. Lo mas sencillo que podes hacer es un agente que corra cada N
segundos que desbloquee las facturas que esten bloqueadas por usuarios
que no tienen conexiones establecidas con el server SQL.

La restriccion que te pone esta solucion es que la conexion que el
usuario establece con la base de datos debe permanecer abierta desde
que el usuario empieza a editar la factura hasta que el usuario
confirma o cancela los cambios. Por ejemplo, esto en un entorno web
(donde lo mas optimo es abrir y cerrar las conexiones en cada
roundtrip) es inpracticable.

Si queres, comenta un poco mas acerca del problema como para que en el
foro surja alguna solucion a tu problema, pero de entrada, no me parece
una buena solucion la de bloquear las facturas como estas haciendo.

Saludos!
Respuesta Responder a este mensaje
#4 Carlos Vargas
19/04/2005 - 15:56 | Informe spam
Saludos Amigo
Bueno este tipo de alternativas las cree para 2 o mas usuarios no puedan
editar un mismo documento
en la tabla facturas ya que tengo tres personas que realizan la misma labor.

De que manera podria evitar este inconveniente, como bloqueo solamente el
registro de esa tabla.

Lo que yo hacia era hacer un insert a una tabla temporal y si otro usuario
accedia lo primero que hacia era preguntar si el documento que quiere editar
ya esta en esa tabla temporal, ese era mi bloqueo,
despues de realizar los cambios volvia a grabar en la tabla factura.

Otra pregunta mas a ver si me pueden ayudar
lei unos links en este foro que hablaban de ver la manera de usar lo menos
posible los exec y sp_executesql
ya que estos codigos de cadena no se precompilaban algo asi era alquien
tiene un comentario al respecto

Muchas Gracias

Carlos Vargas

"Don Roque" escribió en el mensaje
news:
Antes que nada, yo trataria de solucionar esta problematica usando
bloqueos para evitar que dos usuarios editen la misma factura. Ahora
bien, tratando de encarar la solucion que vos tenes ahora andando, lo
que te recomiendo es lo siguiente:

En la base de datos MASTER tenes una tabla que se llama SYSPROCESSES
(es la que consultan los SPs de sistema SP_WHO y SP_WHO2). Usando esa
tabla, vos tenes todas las conexiones que estan abiertas contra el SQL
SERVER. Lo mas sencillo que podes hacer es un agente que corra cada N
segundos que desbloquee las facturas que esten bloqueadas por usuarios
que no tienen conexiones establecidas con el server SQL.

La restriccion que te pone esta solucion es que la conexion que el
usuario establece con la base de datos debe permanecer abierta desde
que el usuario empieza a editar la factura hasta que el usuario
confirma o cancela los cambios. Por ejemplo, esto en un entorno web
(donde lo mas optimo es abrir y cerrar las conexiones en cada
roundtrip) es inpracticable.

Si queres, comenta un poco mas acerca del problema como para que en el
foro surja alguna solucion a tu problema, pero de entrada, no me parece
una buena solucion la de bloquear las facturas como estas haciendo.

Saludos!

Respuesta Responder a este mensaje
#5 Don Roque
19/04/2005 - 18:45 | Informe spam
los EXEC tienen varios problemas, ademas del tema de que para el SQL
SERVER es imposible tener esas consultas precompiladas. Te comento dos
de los que se me ocurren ahora:

1)
Imagina que vos armas todo un entorno de seguridad, creando stored
procedures para actualizar los datos y vistas para consultarlos, por
ejemplo. Si vos dentro de un Stored Procedure haces
EXEC ("select * from alguna_tabla") deberias asignar a tus usuarios
permisos de SELECT sobre las tablas y esto rompe todo el esquema de
seguridad que armaste.

2)
Tendrias que ver de alguna manera para que no se de la situacion en la
que se ejecute algo asi
EXEC ("drop table alguna_tabla")

Espero haber sido claro.

En cuanto al tema de los bloqueos, deberia consultar un poco mas.

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