Ver Mensaje Individual
  #3  
Antiguo 18-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Reputación: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por anubis Ver Mensaje
Por otro lado en el libro de la cara oculta 4, hay un cuadro sobre no usar generadoresk y viene a decir que si necesitamos valores únicos o consecutivos no usemos generadores y la explicación la da cuando, por ejemplo, 2 personas queiren dar de alta un registro y una de ellas hace un rollback y la otra no, quedaría un hueco en la secuencia.
esto que significa, que se puede usar otra forma de aplicar un autoincremento? porque en la cara oculta no lo resuelve.
gracias amigos
Ian Marteens lo explica bien, los generadores no se usan para lo que tú quieres usarlo. Un generador debe darte siempre un número distinto para que no existan repeticiones, por ejemplo, una tabla típica de facturas:
Código SQL [-]
create table tbFacturas (
  id integer not null, // lo crea el generador, el número que sea, lo usamos internamente, no lo ve el usuario
  numero integer not null,  // número único, no repetible, el que ve el usuario
  cliente integer,
  fecha date,
  total numeric(15,2),
  etc
)
El generador se usaría en este caso para el campo id que diferencia a todos los registros de la tabla de facturas, y que si se borra alguna, no importa que se salten números porque no se usa para el tratamiento de los datos que "ve" el usuario, es un código interno para nosotros.
Sin embargo, luego, el campo numero sí que debe ser un número consecutivo, para ello no usamos un generador, en todo caso buscamos el último número y le sumamos 1:
Código SQL [-]
select max(numero)+1 from tbFacturas
En ese caso, si hacemos un rollback no pasa nada, el siguiente usuario que vaya a tomar un numero de factura le saldrá el que realmente toca.
Antes de grabar debes de asegurarte y comprobar que otro usuario no haya hecho otra factura mientras tanto y ya haya usado ese número.
Responder Con Cita