Club Delphi  
    Paypal   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 22-04-2004
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 23
jzginez Va por buen camino
autonumerico en base al maestro

Hola a todos tengo estas tres tablas en firebird 1.5

CREATE TABLE TESTILO (
ID VARCHAR(15) NOT NULL,
DESCRIPCION VARCHAR(40),
FECHA DATE DEFAULT 'now',
ID_MATERIAL INTEGER,
IMAGEN IMAGENES /* BLOB SUB_TYPE 0 SEGMENT SIZE 80 */,
PRECIO FLOAT,
PRODUCDESEADA INTEGER,
EFICIENCIA INTEGER,
CANTIDAD INTEGER,
ID_CLIENTE INTEGER
);

CREATE TABLE TOPERACIONES (
ID INTEGER NOT NULL,
AVERVIATURA VARCHAR(10),
DESCRIPCION VARCHAR(40),
FECHA DATE DEFAULT 'now',
PAGOSEMANA FLOAT,
ID_TIPOMAQ VARCHAR(10),
ID_DEPTO INTEGER,
MINUTAJE TIME,
MINTSEXA FLOAT,
MINTOCIO FLOAT,
TAREAPORHORA FLOAT,
TAREAPORDIA FLOAT,
PAGOOPER FLOAT
);

CREATE TABLE TOPERESTILO (
ID INTEGER NOT NULL,
ID_ESTILO VARCHAR(15),
ID_OPER INTEGER
);

el campo ID de la tabla toperaciones es autonumerico con su generator y su trigger y funciona bien, la tabla toperestilo es un maestro detalle ya que por id_estilo puede haber una o mas operaciones pero necesito que el campo id empiese a numerarse desde 1 cada que ID_Estilo cambia de valor y así despues poder saber cuantas veces la operación uno fue la primera en realizarse, cuantas fue la tercera etc.

espero me puedan ayudar y sobretodo me entiendan
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita
  #2  
Antiguo 23-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
Cool

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.
Responder Con Cita
  #3  
Antiguo 23-04-2004
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 23
jzginez Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 23-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
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;
El sistema creerá que la sentencia termina despues del primer punto y coma (justo despues del primer update) y asi la lanzará al pharser de SQL; evidentemente incompleta, con lo que daría un error que provocaría la terminación anormal de la ejecución del script.

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
Responder Con Cita
  #5  
Antiguo 27-04-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 23
sanxpue Va por buen camino
Lightbulb


Código PHP:
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.... 
Si usas un Procedimiento almacenado podras hacer eso lo que dices

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
Funciona como debe de funcionar
__________________
saludos desde Puebla Mexico..
[email protected]
"como siempre a sus ordenes y siempre con buena cara"
'lolita me excitas, perversa piel de melocotón'
Responder Con Cita
  #6  
Antiguo 27-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
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
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:11:28.


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