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 17-10-2008
payo7 payo7 is offline
Miembro
 
Registrado: ago 2008
Posts: 11
Poder: 0
payo7 Va por buen camino
copiar informacion entre dos tablas

Buenas, le estoy rebuscando y no encuentro la solucion. Tengo dos Tablas, TERMINALES y COLECTOR. En la Tabla COLECTOR, tengo el primary key en la columna CODIGO. La Tabla TERMINALES no tiene primary key. Importo la informacion en TERMINALES desde txt, lo cual me crea valores duplicados, que son necesarios. Tengo tambien un trigger con lo siguiente:
CREATE TRIGGER COLECTOR_CHANGE FOR TERMINALES
AFTER INSERT
AS
BEGIN
INSERT INTO COLECTOR
(CODIGO,CANTIDAD)
VALUES (
TERMINALES.CODIGO,TERMINALES.EXISTENCIAS);
END

El problema esta en que los valores duplicados no se me importan a la Tabla COLECTOR, por el primary key. Hay alguna manera de que cuando se repita el codigo en la Tabla TERMINALES, me lo sume en la columna CANTIDAD de la Tabla COLECTOR? Lo puedo incorporar en el trigger?

Uso Interbase 2007.
Responder Con Cita
  #2  
Antiguo 17-10-2008
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Exclamation

Saludos.

Prueba primero a realizar un Update y en caso de fallar haces el Insert.

Idea:
Código SQL [-]
UPDATE COLECTOR
SET CANTIDAD = CANTIDAD + 1
WHERE CODIGO = TERMINALES.CODIGO;

IF ROW_COUNT = 0 
INSERT INTO COLECTOR
(CODIGO,CANTIDAD)
VALUES (
TERMINALES.CODIGO,TERMINALES.EXISTENCIAS);
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
  #3  
Antiguo 17-10-2008
payo7 payo7 is offline
Miembro
 
Registrado: ago 2008
Posts: 11
Poder: 0
payo7 Va por buen camino
Muchas gracias Rolphy, el Update me funciono bien, pero solamente si hay valores en la Tabla de Colect, lo modifique de esta manera:
CREATE TRIGGER COLECTOR_CHANGE FOR TERMINALES
BEFORE INSERT
AS
BEGIN
UPDATE COLECTOR
SET CANTIDAD = CANTIDAD +TERMINALES.EXISTENCIAS
WHERE CODIGO = TERMINALES.CODIGO;
END

Habria alguna manera de modificar el Trigger para que primero me insertara los valores, y si se repite el codigo, hacer el update? Lo que sucede es que hago el emptytable en COLECTOR antes de Trigger para solamente tener la informacion inventariada. Otra vez, gracias.
Responder Con Cita
  #4  
Antiguo 17-10-2008
hecospina hecospina is offline
Miembro
 
Registrado: oct 2007
Posts: 202
Poder: 17
hecospina Va por buen camino
Hola
En la version 2.1 de firebird existe "insert or update", interbase 2007 no tendra algo parecido ?
Responder Con Cita
  #5  
Antiguo 18-10-2008
payo7 payo7 is offline
Miembro
 
Registrado: ago 2008
Posts: 11
Poder: 0
payo7 Va por buen camino
Gracias por tu aporte Hescopina, trate esto:

BEGIN
insert into t1 (id, c1, c2) values (:id, :c1, :c2)
WHEN SQLCODE -803 DO
update t1 set c1 = :c1, c2 = :c2 WHERE id = :id;
END

pero se atora en WHEN, no lo acepta. Ya encontre la manera dandole varias vueltas, pero si funciona. Importe la columna codigo, en la columna de cantidad el null lo converti en 0, e hice el trigger con el update siguiente:

UPDATE COLECTOR
SET CANTIDAD = CANTIDAD +TERMINALES.EXISTENCIAS
WHERE CODIGO = TERMINALES.CODIGO;

Gracias hescopina y RolphyReyes.
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
Como Pasar Informacion Entre Dos Bases De Datos Con Tablas Identicas? MaSSaKKre SQL 8 06-02-2008 16:20:29
Copiar Informacion De Un EDIT A Un DBGrid Ericklsca Conexión con bases de datos 1 11-07-2006 07:35:46
Como intercambio información entre formularios pyanqn Varios 8 03-11-2005 17:04:13
Como Copiar contenidos entre DBs ELINK Firebird e Interbase 2 29-04-2005 18:41:45


La franja horaria es GMT +2. Ahora son las 14:25:08.


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