lock

01/06/2005 - 15:50 por Juan F Botero | Informe spam
Saludos

Tengo un problema de concurrencia en una tabla y lo unico que me queda por
probar es, el bloqueo de la tabla mientras guardo el nuevo registro para
evitar duplicados.
La pregunta es si este bloqueo se hace desde la aplicacion o desde SQL? si
es utilizando el comando lock desde SQL, agradeceria sus comentarios

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
01/06/2005 - 16:16 | Informe spam
Juan,

Tengo un problema de concurrencia en una tabla



Cual es el problema?.
Pudieras postear la definicion de la tabla, incluyendo restricciones de
integridad e indices?
Como y desde donde estas insertando la fila?


AMB

"Juan F Botero" wrote:

Saludos

Tengo un problema de concurrencia en una tabla y lo unico que me queda por
probar es, el bloqueo de la tabla mientras guardo el nuevo registro para
evitar duplicados.
La pregunta es si este bloqueo se hace desde la aplicacion o desde SQL? si
es utilizando el comando lock desde SQL, agradeceria sus comentarios




Respuesta Responder a este mensaje
#2 Juan F Botero
01/06/2005 - 21:19 | Informe spam
definicion de la tabla en cuestion.

create table ofactura

(

custom integer not null "Numero de factura",

unico_id integer not null " numero unico para cada cliente",

factura_date date not null "DIa, mes y ano de asignacion de peticion en
formato YYYYMMDD (19940631)",

factura_date_crea date default today "Fecha en que se crea esta factura
(fecha del dia)",

factura_impresion date default null " Fecha primera impresion",

factura_limpresion date default null "Fecha ultima impresion",

factura_order integer not null "numero de la factura en la fecha
factura_date",

tiene mas campos

... )



create unique index kcodigo on ofactura(factura_date asc,factura_order asc)
in ofk01;

create index kunico_id on oficha(unico_id) in ohidxk00;

create index kfactura_terminado on ofactura(terminado asc,custom asc) in
ofk06;

create index kicu on ofactura(icu asc) in ofk14;

El problema

el numero de la factura lo calculo leyendo en esta tabla, el ultimo numero
grabado. le sumo 1 y grabo la siguiente factura.

el problema es que se me han presentando muy pocos casos en que salen dos
facturas con el mismo numero . (impresos, pues la llave no permite
duplicados)

he controlado el error de insert, para no imprimir, pero igual el usuario
me ha presentado el mismo problema.

la idea seria bloquear la tabla mientras grabo una nueva factura y asi
evitar los duplicados.

en el codigo de la aplicacion solo hay 6 lineas entre la que busco el ultimo
numero grabado y guardo la nueva factura. no puedo reducir mas por codigo la
distancia entre una y otra operacion



S_SQL = "select max(custom) as F from oficha where factura_date = '" & fecha
& "' "

Set rscliente = Nexus.Execute(S_SQL, afe)

factura = rscliente!p + 1
hago el insert con los datos validados



Estos bloqueos afectan mucho el rendimiento de la aplicacion?






"Alejandro Mesa" escribió en el
mensaje news:
Juan,

Tengo un problema de concurrencia en una tabla



Cual es el problema?.
Pudieras postear la definicion de la tabla, incluyendo restricciones de
integridad e indices?
Como y desde donde estas insertando la fila?


AMB

"Juan F Botero" wrote:

Saludos

Tengo un problema de concurrencia en una tabla y lo unico que me queda
por
probar es, el bloqueo de la tabla mientras guardo el nuevo registro para
evitar duplicados.
La pregunta es si este bloqueo se hace desde la aplicacion o desde SQL?
si
es utilizando el comando lock desde SQL, agradeceria sus comentarios




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida