Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #11  
Antiguo 03-12-2009
Avatar de Axel_Tech
Axel_Tech Axel_Tech is offline
Miembro
 
Registrado: nov 2008
Ubicación: lugar en que está ubicado algo.
Posts: 85
Poder: 18
Axel_Tech Va por buen camino
Con más de 2 bases de datos se complica la cosa. Yo creo que sí funcionaría, aunque veo un par de inconvenientes:
1.- Con tanto INSERT y UPDATE no se que rendimiento obtendrías. Sería cuestión de probarlo.
2.- Cuando llegas a este punto:
Cita:
(que si ya se habia insertado con el del query1 lo va a saltear, y sino lo va a agregar)
desconozco si se puede evitar que se muestre una excepción por violación de clave primaria cuando intentas insertar un producto que ya existe. Nunca se me ha dado el caso, quizás si se pueda pero ignoro cómo.

Tengo en mente otra solución: utilizando tablas temporales (una por cada tabla de cada base de datos) y un procedimiento almacenado con 2 cursores. Las tablas temporales las rellenarías tal y como hemos visto hasta ahora, recorriendo las IBQuery y utilizando el criterio "desde" y "hasta".
Una vez rellenas (para evitar errores te recomiendo que las tablas se llamen igual o parecido en la base de datos final, y los campos también) el SP sería algo tal que así:
Código SQL [-]
/*este primer cursor es para insertar directamente los que no existen en la tabla1, 
y nos quitamos ese problema de un plumazo. 
En este caso es con la tabla2, sería de la misma forma hasta tablaN:*/
FOR 
    SELECT A.CODIGO, A.NOMBRE, A.PRECIO FROM TABLA2 A 
    WHERE NOT EXISTS (SELECT B.CODIGO FROM TABLA1 WHERE B.CODIGO=A.CODIGO)
    INTO :COD, :NOM, :PREC2    /*variables que habrás tenido que declarar previamente*/
DO
    INSERT INTO TABLA_FINAL (CODIGO, NOMBRE, PRECIO2) VALUES (:COD, :NOM, :PREC2);

FOR  /*con la ayuda de este otro cursor para recorrerla, hacemos la consulta de la tabla1*/
     SELECT CODIGO, NOMBRE, PRECIO FROM TABLA1
     INTO :COD, :NOM, :PREC         /*:PREC es otra variable que tienes que declarar*/
DO
     BEGIN
        SELECT PRECIO FROM TABLA2 WHERE CODIGO=:COD
        INTO :PREC2    
        INSERT INTO TABLA_FINAL (CODIGO, NOMBRE, PRECIO1, PRECIO2) VALUES (:COD, :NOM, :PREC, :PREC2);

        SELECT PRECIO FROM TABLA3 WHERE CODIGO=:COD
        INTO :PREC2    
        INSERT INTO TABLA_FINAL (CODIGO, NOMBRE, PRECIO1, PRECIO2) VALUES (:COD, :NOM, :PREC, :PREC2);

        /*y así sucesivamente, hasta que llegues a tablaN*/
     END

Un SP es más potente y más rapido que tanto INSERT y UPDATE. Tendrías que depurarlo un poco y adaptarlo a tus necesidades. Como ya he dicho antes todo es cuestión de probarlo.
__________________
No hope, no dreams, no love, my only escape is Underground
Responder Con Cita
 



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
Tomar datos del lector de código de barras jam888 OOP 4 22-03-2010 17:53:03
Tomar datos de otra aplicacion dblx API de Windows 4 23-12-2008 01:16:38
Tomar datos de excel vinagre3ro Internet 2 04-10-2006 09:59:28
Hola soy muy nueva en esto de las bases de datos y deseo imprimir tablas nuri Impresión 1 05-07-2005 19:49:31
Como mostrar los datos para luego insertarlos? judoboy OOP 8 14-05-2003 09:51:51


La franja horaria es GMT +2. Ahora son las 22:43:16.


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