Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-06-2005
Will Will is offline
Registrado
 
Registrado: abr 2004
Posts: 5
Poder: 0
Will Va por buen camino
Lightbulb Bloqueo de registros manualmente

Hola amigos!!
Quisiera saber si alguien podría decirme(si existe) la forma de BLOQUEAR MANUALMENTE algunos registros específicos de una tabla con la finalidad de controlar la generación de consecutivos automáticos de facturas, les comento la situación por si ustedes tienen alguna otra forma de controlar esto.
Vamos a suponer el caso que un usuario va a generar 500 facturas(un poco exagerado, pero es solo para exponer el caso), la primera factura va a tener el consecutivo que está guardado en una tabla de consecutivos, las 499 facturas siguientes van a tener el consecutivo de la factura anterior mas uno.
Otro usuario va a generar otras 10 facturas con el mismo proceso de consecutivos, PERO al momento de consultar el consecutivo para asignar a la primera factura de las 10 a generar, va a encontrar el mismo primer consecutivo que se asignó a la primera factura de las 500, por lo tanto se van a generar 10 facturas con el mismo consecutivo.
Lo que pensé fué en bloquear el REGISTRO en la tabla de consecutivos al iniciar la transacción de las 500 facturas con la intención de que si otra transacción quisiera CONSULTAR este mismo registro, saliera alguna clase de mensaje de bloqueo o algo por el estilo,y liberar el registro despues de terminada la transacción.
Estuve buscando algo sobre una sentencia SQL que era algo así como: SELECT CODIGO,VALOR_CONSECUTIVO FROM CONSECUTIVOS WHERE CODIGO='FACTURAS' FOR UPDATE WITH LOCK. pero no encontré mucha información al respecto, la probé pero no me funcionó para lo que tengo pensado hacer.

Perdonen por la chacharería que yo se que da flojera leer , pero es para exponer claramente la situación. Les agradecería si tienen alguna información que me pueda servir.
Gracias!!...ah y que viva DELPHI !!!!!
Responder Con Cita
  #2  
Antiguo 17-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Seguramente la idea expuesta en este post te será de utilidad.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 17-06-2005
Avatar de HenryAraniva
HenryAraniva HenryAraniva is offline
Miembro
 
Registrado: jun 2005
Ubicación: El Salvador
Posts: 44
Poder: 0
HenryAraniva Va por buen camino
No te entendi muy bien tu ejemplo, parece que cuando haces una consulta se genera un nuevo consecutivo o algo así entendi con lo que dices "... PERO al momento de consultar el consecutivo para asignar a la primera factura de las 10 a generar, va a encontrar el mismo primer consecutivo que se asignó a la primera factura de las 500" y no explicas si es una aplicación cliente servidor y accesarán a esta tabla varios usuarios a la vez.
__________________
Cuando la única herramienta es un martillo todos los problemas tienen cara de clavo
Responder Con Cita
  #4  
Antiguo 17-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
lo que correspondería hacer es que al momento de iniciar la generación de facturas, lances la actualización en falso, dejando el registro bloqueado y por último actualizarlo con el valor que debe tener y hacer commit.
Dado que todos los clientes tendrian este comportamiento, los demás podrán iniciar el proceso solamente si ningún otro ha empezado, de lo contrario recibirán un error o simplemente quedarán esperando (dependiendo de cómo configures la transacción).

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 17-06-2005
Will Will is offline
Registrado
 
Registrado: abr 2004
Posts: 5
Poder: 0
Will Va por buen camino
Lightbulb

Correcto jachguate, eso es exactamente lo que tengo pensado hacer, entonces la pregunta se resumiría en: "Como hago para bloquear el registro que contiene el consecutivo, para que otro usuario en el momento de CONSULTAR lo encuentre en estado de bloqueo?", indicándome así que otro usuario se encuentra generando facturas.
les agradezco sus ayudas y comentarios!!
Responder Con Cita
  #6  
Antiguo 17-06-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Yo tuve un problema similar en una aplicación que estoy desarrollando actualmente, pero yo lo resolví de la siguiente manera:

Cuando un usuario necesita saber el número consecutivo, tomo el valor de la tabla y lo uso. Si otro usuario necesita un consecutivo, lo tomo igualmente, no importando que sea el mismo.

Al momento de guardar los datos en la BD es donde viene lo bueno, en un trigger before insert, primero verifico el valor actual del consecutivo con el que tiene asignado el registro a insertar, si es igual, uso el valor e incremento el cosecutivo. Si el valor del consecutivo es mayor al actual, significa que algún otro cliente yo usó ese consecutivo, así que solo actualizo el campo con el nuevo consecutivo y lo incremento.

Obviamente en la aplicación indico que el número consecutivo indicado puede variar al momento de grabar los datos, pero en la impresión ya se muestra el consecutivo correcto.

Hasta el momento esto me ha servido muy bien, sería cosa que lo pruebes y ver que tanto te sirve a tí.


Saludos...
Responder Con Cita
  #7  
Antiguo 17-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Cita:
Empezado por Will
"Como hago para bloquear el registro que contiene el consecutivo, para que otro usuario en el momento de CONSULTAR lo encuentre en estado de bloqueo?",
Lanzando en ese momento una actualización en falso. ¿has leido la respuesta a la que te remití originalmente?
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 03:37:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi