![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
para esto no podes usar un generador. Es mejor que asignes los números desde tu aplicación... pues el generador partirá de 1, y no volverá "automáticamente" a este valor....
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate Última edición por jachguate fecha: 23-04-2004 a las 00:16:27. |
|
#2
|
||||
|
||||
|
Master, nuevamente mil gracias.
oye ya entrados en la exprimidera de cerebros siempre he escrito mis trigger como viene en la ayuda de interbase es decir entre los comandos SET TERM !! ; Create trigger............ . . . SET TERM; !! pero nunca he encontrado para que son me podrias esplicar su uso. gracias
__________________
Espero poder seguir exprimiéndote el cerebro 8) Jorge Zamora Ginez Puebla, Pue. México |
|
#3
|
||||
|
||||
|
esto, segun tengo entendido, ya ha sido superado en la versión 1.5 de firebird. Básicamente, es debido a que el programa cliente no era capaz de recnoocer el final del trgger/stored procedure, debido a que el caracter de fin de sentencia (;, que es el que normalmente se usa para delimitar las sentencias en un script, también se utiliza para delimitar las sentencias dentro del trigger.
Si no haces la llamada a set term... ocurrirá que, en un script como este: Código:
Create trigger mitrigger
Active before insert on tabla
AS
Begin
Update OtraTabla
Set campo = campo + New.campo
where llave = New.llave;
Update OtraTabla2
Set campo = campo + New.campo
where llave = New.llave;
End;
Al cambiar el caracter de terminación de las sentencias por !!, por ^ o por cualquier otro delimitador que no sea el punto y coma, se consigue determinar donde termina efectivamente la sentencia... evitando estos problemas. Hasta luego. ![]()
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
#4
|
|||
|
|||
Código PHP:
Código:
Create Procedure INICIA_GENERADOR
As
DECLARE VARIABLE
GEN INTEGER;
Begin
GEN = GEN_ID(generador,0);
WHILE (GEN > 0) DO
GEN = GEN_ID(generador,-1);
END
__________________
saludos desde Puebla Mexico.. [email protected] "como siempre a sus ordenes y siempre con buena cara" 'lolita me excitas, perversa piel de melocotón' |
|
#5
|
||||
|
||||
|
Pero vos estas asumiendo el caso en que no habrá necesidad de insertar un nuevo registro detalle para un registro ya existente... o que no habrá dos usuarios ingresando información concurrentemente. En cualquiera de estos dos casos, el proceso fallará generando claves duplicadas (suponiendo que la clave es clavemestro+contadordetalle)
En el post anterior, cometí el error de usar el verbo poder, cuando debi usar el deber. "Para esto no debes usar un generador"... en fin, son vicios de lenguaje. ![]() Hasta luego. ![]()
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
#6
|
|||
|
|||
|
Pues no le veo
Pues no le veo problema, puesto que podemos crear su generator para cada usuario diferente, en tiempo de ejecucion y asi como su Stored Procedure, y como dices el problema seria clavemaestro+clavecontador, pero como tu dices tambien se toparia con lo mismo, supongamos que sea un punto de venta y el pastelito x tiene la clave 1 y al mismo tiempo llegan dos clientes en diferentes cajas y los cajeros chechan el pastelito 1 primero ahi tambien se repetiria.. no crees¡¡¡¡, entonces la clave primaria deberia ser clavemaestro+clavecontador+numerodecaja
__________________
saludos desde Puebla Mexico.. [email protected] "como siempre a sus ordenes y siempre con buena cara" 'lolita me excitas, perversa piel de melocotón' |
|
#7
|
||||
|
||||
|
Cita:
Cita:
Yo no me refiero a que se duplique el número del contador, que eso es precisamente lo que se busca. Pero te voy a poner un ejemplo... suponiendo el caso ya expuesto del punto de venta. Estado Actual: Caja1: Esperando cliente Caja2: Esperando cliente Caja3: Cajero en tiempo de comida Secuencia de sucesos:
Esto es para un caso sencillo con solo 3 usuarios concurrentes... pero en la práctica puede llegar a ser mucho mas complejo. Si puede crearse un generador por usuario, dependerá que un usuario quiera usar solamente una instancia de la aplicación. El crear uno por terminal... limitará a una instancia por terminal... En fin, es mi apreciación personal, que en este caso, es mejor establecer otro método para generar este tipo de secuencias... o bien cambiar un poco la forma de pensar, y tener un único generador para todos los detalles. La mejor forma de hacerlo, será diferente de acuerdo a las especificaciones de cada aplicación, y corresponderá a su analista definir un criterio. Hasta luego. ![]()
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
![]() |
|
|
|