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 24-12-2009
ivantech ivantech is offline
Miembro
 
Registrado: dic 2009
Posts: 27
Poder: 0
ivantech Va por buen camino
Smile Trigger para actualizar tabla detalle

hola

soy nuevo en el foro, quisiera que me ayudaran con algo de trigger ya que soy nuevo en esto. estoy en desarrollo de un sistema de inventarios y estoy trabajando con el modulo para recepcionar compras de mercancias provenientes de una orden de compras. ya que esto es asi, pretendo cargar la orden de compras en el modulo de recepcion para que el usuario solo tenga que recibir la columna "cantidad a recibir:". ahora bien el caso es el siguiente:

El modulo de recepción esta compuesto por 2 Tablas "Recepcion_Compras_Cab" y "Recepcion_Compras_Det". yo quiero que al insertar el encabezado se dispare un trigger que cargue los detalles de la orden de compras y la tabla detalles de recepción de compras. actualmente podría hacerlo directamente desde delphi pero como dije quiero incursionar en esto de los triggers y store procedure.

repito, tengo conocimientos básicos de triggers así que si me pueden echar una manito con un ejemplo se los agradecería bastante ya que esto me ayudaría a desarrollarme mas con este motor de base de datos en el cual decidí incursionar. gracias de antemano.
Responder Con Cita
  #2  
Antiguo 08-01-2010
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 21
mlara Va por buen camino
Creo que hay alguna confusión por ahí. Un TRIGGER (disparador) se dispara o ejecuta un código PL-SQL cuando se hace una inserción, una actualización, o cuando se elimina un registro. Según tu aseveración "yo quiero que al insertar el encabezado..." entiendo que al insertar el encabezado, es decir un nuevo registro en la tabla maestro, te muestre el detalle, lo cual no tiene sentido, pues si apenas vas a realizar una inserción de una fila maestra, no puede existir el detalle.

De acuerdo a lo anterior voy a asumir que lo que quieres decir es que vas a insertar el encabezado en algún tipo de componente en tu aplicación, es decir, que lo que necesitas es hacer una consulta de los registros correspondientes en la tabla detalle, para lo cual explícitamente no necesitarías un TRIGGER, y en cambio te podría servir construir un SELECT PROCEDURE, es decir, un STORED PROCEDURE que devuelve registros. Esto es una alternativa porque si tu consulta se realiza una sóla vez, o es muy explícita, quizá convendría hacerla directamente desde un TQuery.

La verdad, yo en este caso sugiero usar dos TQuery, uno para la tabla maestro y la otra para la tabla detalle, enlazándolos adecuadamente, para que la consulta sobre la tabla detalle se realice automáticamente.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.
Responder Con Cita
  #3  
Antiguo 10-02-2010
ivantech ivantech is offline
Miembro
 
Registrado: dic 2009
Posts: 27
Poder: 0
ivantech Va por buen camino
Talking

hola

gracias por responder

si, es probable que no me halla expresado correctamente, todo esto a lo que me refiero lo se hacer perfectamente a través de delphi, ahora bien estoy incursionando con el fin de renovar y aprender a trabajar con DBMS, y no siempre hacer todo a través de delphi, quería saber si al insertar un encabezado (maestro) podría cargar un SELECT e insertarlo a una tabla detalle de ese maestro una cantidad x de registro, para luego a través de la aplicación simplemente modificar los valores y no tener que insertarlos 1 a 1. pero investigando me di cuenta de que esto es muy ortodoxo a través de TRIGGER y al parecer es mejor hacerlo desde delphi. pero nada muchas gracias por tu observación.
Responder Con Cita
  #4  
Antiguo 10-02-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola ivantech.

Todo lo que puedas hacer desde Delphi (y que no requiera intervención del usuario) lo puedes hacer también en un trigger.

Este tipo de acciones (que se suelen llamar reglas de negocio) a mi me parece más ortodoxo programarlas en la base de datos, mediante un trigger, que en tu programa Delphi. Así separas la aplicación en varias capas (base de datos, reglas de negocios, y interficie de usuario) y es más fácil de mantener.

Aquí tienes un par de artículos en castellano para introducirte en la programación de triggers :

http://www.firebird.com.mx/modules/s....php?itemid=28
http://www.firebird.com.mx/modules/s....php?itemid=31

Es muy conveniente que utilices un buen programa para administrar tu base de datos Firebird, puesto que te facilitará la programación de triggers. Un programa como IB-Expert te permite incluso ejecutar tus triggers, línea a línea, depurando los errores.

Lo que estás pidiendo es que dentro del trigger tengas una sentencia insert de este tipo :

insert into detalles (id_detalle, id_cabecera, campo1, campo2)
select gen_id(detalles_gen, 1), new.id_cabezera, campo1, campo2
from tabla1

Como puedes ver pongo la clave primaria (id_detalle) mediante un generador, para ir asignando valores consecutivos. Y en el campo de relación con la cabecera (id_cabecera), utilizo la variable new.id_cabecera.

Como puedes leer en los artículos que te he enlazado, con las variables new.**** puedes consultar el valor de los campos en el registro de cabecera recien introducido que ha provocado la ejecución del trigger.

Saludos.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Modificar tabla para banda detalle Vlady SQL 6 24-07-2008 23:05:01
Filtro para Actualizar tabla... anghell77 SQL 3 21-05-2006 11:06:53
Maestro-Detalle ;Actualizar detalle a partir de un DBgrid norberto_larios Conexión con bases de datos 1 11-09-2004 18:17:34
Trigger para actualizar el id de una tabla Choclito Firebird e Interbase 2 13-07-2004 20:46:38
Actualizar tabla detalle erickperez6 Conexión con bases de datos 0 04-05-2004 03:19:09


La franja horaria es GMT +2. Ahora son las 10:26:24.


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