Ver Mensaje Individual
  #60 (permalink)  
Antiguo 13/01/2016, 06:21
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Mucho bardo...

Códigos como el descripto pueden generarse automáticamente por medio de TRIGGERS en la base de datos, independizando la aplicación del problema.
Generarlos en la aplicación implica un exceso de acoplamiento entre aplicación y base, lo que se considera un error en diseño de software.

Esto sería un ejemplo. No he tenido en cuenta elcomportamiento y obtención del codigo unico, que a partir de esto debería ingresar como "CODIGO-0000" solamente.
Esto es únicamente un EJEMPLO de como se construiria un trigger que cumpla con lo dicho:

Tabla:
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `Personas` (
  2.   `CodigoUnico` VARCHAR(100) NOT NULL,
  3.   `Anio` datetime  NOT NULL,
  4.   `Nombre` VARCHAR(100) NOT NULL DEFAULT '',
  5.   `Apellido` VARCHAR(100) NOT NULL DEFAULT ''
Nota que he cambiado la definicion del campo numerico, que pasa a ser sin signo. Asi se usan los AI.
Tambien he cambiado el tipo de columna del codigo unico. NO USES TEXT para tipos de datos de esta clase. No es esa su función, y no podrás luego indexarlos, lo que generará errores de consultas y baja performance.

TRigger:
Código MySQL:
Ver original
  1. CREATE DEFINER = CURRENT_USER TRIGGER `test`.`personas_BEFORE_INSERT` BEFORE INSERT ON `personas` FOR EACH ROW
  2. DECLARE countId INT DEFAULT 0;
  3.     COUNT(*)
  4.     personas
  5.     SUBSTRING_INDEX(new.CodigoUnico, '-', -1) = YEAR(anio)
  6.         AND SUBSTRING_INDEX(new.CodigoUnico, '-', 2) = new.CodigoUnico INTO countId;
  7. IF countId = 0 THEN
  8.     SET maxId = 1;
  9.     ELSE
  10.     SET maxId = maxId + 1;
  11.     END IF;
  12.     SET new.CodigoUnico = CONCAT(new.codigounico, '-', MaxId);
  13.    
  14. END $$
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 13/01/2016 a las 06:58