Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-08-2004
Avatar de triniti
triniti triniti is offline
Miembro
 
Registrado: Jun 2004
Ubicación: Alicante.
Posts: 25
Poder: 0
triniti Va por buen camino
Exclamation Actualizar Contadores !!

Hola! Os explico un poco mi situación:
Estoy haciendo un TPV para una tienda, y en una tabla guardo todos los tickets que se imprimen con números correlativos. Pero si dentro de dos días, borro un ticket, no quiero que ese número se pierda, sino que ha de ser utilizado por el siguiente ticket que se dé de alta.
Es decir, que necesitaría un proceso por el cual todos los tickets tuviesen números correlativos, incluso después de una eliminacion, un proceso de actualización de contador de tickets, teniendo en cuenta que mientras éstos se actualizan, ningún usuario puede acceder a ellos (se bloquearía la tabla durante la actualización).
Si alguién sabe de algún proceso parecido para realizarlo en Delphi u Oracle, que me heche una mano si es posible.

Saludos y gracias anticipadas!!
Responder Con Cita
  #2  
Antiguo 03-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: May 2003
Ubicación: Guatemala
Posts: 6.243
Poder: 21
jachguate Va por buen camino
Cool

en oracle, no podes valerte de un trigger after delete, debido a que la tabla estará "mutante".

No me queda claro si lo que queres es reutilizar el número del borrado, o correr todos los siguientes para utilizar siempre el último número.

Supondré el segundo caso, en el cual, desde delphi podes hacer:

Código Delphi [-]

Procedure TForm1.BorrarTicket(Numero : Integer);

Begin
  db1.StartTransaction;
  try
    query1.sql.clear;
    query1.sql.add('delete ticket where numero = :numero');
    query1.ParamByName('numero').AsInteger := Numero;
    query1.execsql;
    query1.sql.clear;
    query1.sql.add('update ticket set numero = numero - 1 where numero > :numero');
    query1.ParamByName('numero').AsInteger := Numero;
    query1.execsql;
    db1.commit;
  except
    db1.rollback;
    raise;
  end;
end;

Esto correrá todos los tickets superiores a número... manteniendo la correlatividad.

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 03-08-2004
Avatar de ruina
ruina ruina is offline
Miembro
 
Registrado: Jun 2004
Posts: 196
Poder: 14
ruina Va por buen camino
Debes tener en cuenta que los tickets de venta tienen Fecha y, al igual que las facturas, de poco sirve que no tengas huecos si no son correlativos en el tiempo.

vamos que la misma multa te meten por tener un hueco que por rellenarlo de malas maneras
__________________
todo el mundo debe creer en algo... yo creo que voy a tomarme otra copa.
Responder Con Cita
  #4  
Antiguo 03-08-2004
Avatar de triniti
triniti triniti is offline
Miembro
 
Registrado: Jun 2004
Ubicación: Alicante.
Posts: 25
Poder: 0
triniti Va por buen camino
Por una cuestión fiscal, supongamos el siguiente ejemplo:
tenemos los siguientes tickets : 1, 2, 3, 4 y deseamos borrar el 3.
Como resultado, deberiamos obtener la siguiente correlación despues del borrado: El ticket 1 seguiria siendo el 1, el ticket 2 seguiria siendo el 2, y el ticket 4 pasaria a ser el 3.

Si no estoy confundida, si aplicamos el procedimiento de JachGuate creo que no nos valdría.

Lo de las fechas lo hemos hablado y no tiene importancia para nuestro caso, solo necesitamos que sea correlativo el número de ticket.

Un saludo!!
Responder Con Cita
  #5  
Antiguo 03-08-2004
Avatar de triniti
triniti triniti is offline
Miembro
 
Registrado: Jun 2004
Ubicación: Alicante.
Posts: 25
Poder: 0
triniti Va por buen camino
Ya hemos encontrado la solucion mis compañeros y yo:
como las ventas con su correspondiente ticket se pasan a un histórico al final del dia, y es en el histórico donde interesa la correlación de numeros, grabaremos el número de ticket de forma autonumérica, sumando 1 al nº anterior en cada insert.

Saludos!!
Responder Con Cita
  #6  
Antiguo 03-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: May 2003
Ubicación: Guatemala
Posts: 6.243
Poder: 21
jachguate Va por buen camino
Cool

Hola.

Me alegra que ya hayas encontrado una solución... pero:

Cita:
Empezado por triniti
Si no estoy confundida, si aplicamos el procedimiento de JachGuate creo que no nos valdría.
Cita:
Empezado por triniti
El ticket 1 seguiria siendo el 1, el ticket 2 seguiria siendo el 2, y el ticket 4 pasaria a ser el 3.
Es justamente lo que te estoy proponiendo!!!

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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 13:37:44.


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