Club Delphi  
    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 23-03-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Conectar Trigger en Delphi

Hola que hay denuevo???,

ya he cambiado de aplicación y tengo una base de datos hecha con interbase 6.0 y he estado indagando en este foro mediante la busqueda para crear un valor autonumerico, por lo cual he creado un generador y un trigger para en cada una de las tablas el campo clave hacerle autonumérico.

Para referirme a fdicha tabla en Delphi 6 utilizo un Query, mi problema es que no se como insertar el valor autonumerico en la tabla, es decir, no se como referime al trigger en delphi para aplicar ese valor autonumérico a la tabla.

gracias por vuestra ayuda.
Responder Con Cita
  #2  
Antiguo 23-03-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
El trigger solo se ejecuta desde la base de datos, desde Delphi nunca vas a poder llamarlo.

Ahora, lo que debes hacer en el query de inserción es omitir el valor del campo autonumérico, ya que el trigger es el que está asignando ese valor.

Un ejemplo sería:

Código SQL [-]
/* La tabla */
CREATE TABLE MITABLA (
  ID: INTEGER NOT NULL,
  DATA: VARCHAR(30)
);

/* El generador */
CREATE GENERATOR GEN_ID_MITABLA;

/* El trigger */
CREATE TRIGGER INSERT_ID FOR MITABLA
ACTIVE ON BEFORE INSERT
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GEN_ID_MITABLA, 1);
END;
Ya con esto desde delphi solo haces:
Código SQL [-]
INSERT INTO MITABLA (DATA) VALUES ('PROBANDO');

Saludos...
Responder Con Cita
  #3  
Antiguo 24-03-2005
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Otra forma de hacerlo

Hola VRO!

Efectivamente como bien lo dice maeyanes el trigger que actualiza el generador no lo puedes disparar directamente desde delphi ya que ese es trabajo del servidor.

También estoy de acuerdo en que una solución práctica es omitir del query de inserción el campo asociado con el generador para que Delphi no proteste cuando se quede vacío un campo que es requerido. (de hecho es lo que yo siempre hago)

Sin embargo en ocasiones es útil conocer cuál es el valor que le corresponde al registro en la secuencia del generador sin tener que esperar hasta que el servidor lo asigne (Regularmente será hasta aplicar un commit en la transacción actual y después de refrescar la tabla)

Si utilizas los componentes IBX que vienen con el Delphi, me refiero a IBDataSet o IBQuery puedes encontrar una propiedad que se llama GeneratorField

Por medio de esta función puedes incluir el campo asociado con el generador en el query de inserción sin ningún problema.

Las opciones que tienes que configurar tomando el mismo ejemplo que pone maeyanes son :

Primero indicas cual es el generador y campo que afecta

Generator: GEN_ID_MITABLA
Field: ID
Increment By: 1

Después indicas en que momento se actualiza el generador

Apply Event
- On New Record
- On Post
- On Server

La selección de Apply Event es al gusto del cliente, por jemplo si seleccionas On New Record el generador se dispara al momento de insertar un registro (IBQuery1.Insert) y el campo ID se actualiza inmediatamente con el valor correspondiente en la secuencia, El inconveniente en este caso es que si cancelas la inserción (IBQuery1.Cancel) el generador ya se actualizó y se salta ese número de la secuencia.

Para evitar esto puedes elegir On Post de esta forma el generador se actualiza cuando guardas el registro (IBQuery1.Post).

La última opción On Server como su nombre lo indica es dejar que el servidor se encarge de actualizar el generador, aquí la ventaja es que Delphi no va a protestar cuando el campo se quede vacío porque ya le estás anticipando que es un campo asociado con un generador.


Bueno, ahora ya puedes elegir la opción que consideres más apropiada.

Un saludo.
Responder Con Cita
  #4  
Antiguo 28-03-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Thumbs up Gracias

Muchísimas gracias por vuestras respuestas, me va a la perfección.

Muchas gracias.
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 10:17:54.


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