Ir al contenido


Foto

Copiar entre base de datos diferentes


  • Por favor identifícate para responder
2 respuestas en este tema

#1 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 mensajes
  • LocationMisiones, Argentina

Escrito 21 marzo 2014 - 07:26

Estoy usando Firebird en un sistema de gestión comercial en el cual debo transportar los datos de una sucursal a otra por medios físicos, es decir mover los datos de una base de datos a un archivo para luego volver a insertarlos en otra base de datos.
En un principio todo puede hacerse con otra base de datos de intercambio. Con más claridad: paso aquellas filas que deben ser modificadas en la tabla destino a una base de datos de intercambio y (apagando el servicio) copio la base de datos de intercambio para llevarla a destino y realizar la operación opuesta.
La base de datos de intercambio, puede ser un archivo binario creado con ClientDataSet en vez de una tabla firebird para evitar tener que apagar el servicio para evitar corromper la base de datos. Y en este segundo caso aun es más complicado, debido a su distinta naturaleza. Por lo que me remito al primer caso.
Ahora bien, el problema que me surgió y hasta ahora creo que es una limitación de Firebird, es el siguiente:
Para pasar de una tabla a otra que no se encuentre en el mismo archivo no hallo la manera de expresar la sentencia, debido principalmente a que una consulta con TIBQuery se encuentra en el marco de una sola base de datos y una única transacción (esto último es obvio).
La única forma que hallé hasta el momento es copiar mediante fuerza bruta (apareo), es decir recorriendo las filas de la tabla origen y creando o modificando filas de la tabla destino, hasta terminar las filas de la tabla origen.
O sea, quitando todo lo complicado:



delphi
  1. TablaOrigen.First
  2. while not TablaOrigen.Eof do
  3. begin
  4.   TablaDestino.Insert
  5.   TablaDestino.Campo1:= TablaOrigen.Campo1
  6.   TablaDestino. ...
  7.   TablaDestino.Campon:= TablaOrigen.Campon
  8.   TablaDestino.Post
  9.   TablaOrigen.Next
  10. end
  11. Commit



Utilizo los componentes de Interbase

¿Alguien conoce alguna conexión o algún método para hacer este trabajo de una manera más eficiente?
¿O simplemente no puedo salir del marco de la base de datos?
Vi soluciones con extracción de datos usando herramientas externas (isql), pero no es a lo que me refiero, sino a un método desde la aplicación sin recurrir a llamadas a programas externos.
8o|  :cry:
  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 21 marzo 2014 - 07:45

Saludos.

Tal vez la sentencia Execute Statement te pueda servir.
  • 0

#3 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 mensajes
  • LocationMisiones, Argentina

Escrito 21 marzo 2014 - 07:54

Bueno, eso fue "desburrante". Gracias.
Normalmente no utilizo más procedimientos que los disparados por eventos y aparentemente la solución está ahí.
(y)
  • 0




IP.Board spam blocked by CleanTalk.