Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-09-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
NULL
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 174
Poder: 7
martini002 Va por buen camino
Copiar datos entre Bases de Datos

Saludos Amigos, donde quiera que se encuentren,
tengo un problemita con una situacion, quiza a ustedes les ha pasado anteriormente,
quisiera copiar los datos de una BD a otra, pero en el ultimo paso me quedo trancado,
y no tengo idea de que pudiera hacer, he estado buscando pero no encuentro algo que me ayude,
les muestro lo que he hecho,

Gracias Infinitas por su tiempo y su ayuda

Código Delphi [-]

//Creamos la nueva base de datos desde cero y luego agregamos un par de datos.

procedure TForm7.Button1Click(Sender: TObject);
Var
  User, Pass:String;
begin
  with ZConnection1 do
    try
      if ZConnection1.Connect=True then
        begin
          Disconnect;
        end;
      DataBase:='F:\Hola.sqlite';
      Protocol:='sqlite';
      Properties.Add('CreateNewDatabase= CREATE DATABASE '+QuotedStr('F:\Hola.sqlite')+''); 
      Properties.Add(' User '+QuotedStr(User)+' PASSWORD '+QuotedStr(Pass)+' PAGE_SIZE 4096 DEFAULT CHARACTER SET ISO8859_1');
    finally
      Connect;
    end;
  With ZQuery1 Do
    try
      Close;
      SQL.Text:='CREATE TABLE Prueba (Codigo Integer, Nombre Char(20))';
    finally
      Open;
    end;
end;

procedure TForm7.Button2Click(Sender: TObject);
begin
  With ZQuery1 Do
    try
      Close;
      SQL.Text:='Insert Into Hola Values(1, '+QuotedStr('Martin')+')';
    finally
      ExecSQL
    end;
end;

Código Delphi [-]
//Luego creamos la segunda base de datos, y aqui es donde viene la cuestion
//al final quiero pasar los datos de la tabla de arriba para esta, cuando presione el boton 4
//Alguna idea?

procedure TForm7.Button3Click(Sender: TObject);
Var
  User, Pass:String;
begin
  with ZConnection1 do
    try
      if ZConnection1.Connect=True then
        begin
          Disconnect;
        end;
      DataBase:='F:\Mundo.sqlite';
      Protocol:='sqlite';
      Properties.Add('CreateNewDatabase= CREATE DATABASE '+QuotedStr('F:\Mundo.sqlite')+''); 

      Properties.Add(' User '+QuotedStr(User)+' PASSWORD '+QuotedStr(Pass)+' PAGE_SIZE 4096 DEFAULT CHARACTER SET ISO8859_1');
    finally
      Connect;
    end;
  With ZQuery1 Do
    try
      Close;
      SQL.Text:='CREATE TABLE Mundo (Codigo Integer, Nombre Char(20))';
    finally
      Open;
    end;
end;

procedure TForm7.Button4Click(Sender: TObject);
begin
  if ZConnection1.Connect=True then
    begin
      ZConnection1.Disconnect;
    end;
  ZConnection1.DataBase:='F:\Hola.sqlite';
  ZConnection1.Protocol:='sqlite';
  ZConnection1.Connect:=True;
  ZQuery1.Close;
  ZQuery1.SQL.Text:='Select * From Hola';
  ZQuery1.Open;
end;
__________________
El Conocimiento se puede compartir, pero la Experiencia es totalmente Intransferible.
Responder Con Cita
  #2  
Antiguo 07-09-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
NULL
 
Registrado: ago 2006
Posts: 7.659
Poder: 20
Caral Va por buen camino
Hola
Nunca lo he hecho pero me parece que tienes que:
1- tener dos conexiones diferentes para cada BD.
2-Mantener las conexiones activas
3-Que las tablas y campos sean iguales
4-Hacer un recorrido de la tabla que quieras copiar.
5-Hacer un update a la tabla nueva haciendo un recorrido del query de la primera tabla.
no me hagas mucho caso, solo opino.
saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 07-09-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
NULL
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 174
Poder: 7
martini002 Va por buen camino
Hola Caral,
eso lo he pensado,
pero ahora la cuestion es como?
ok podria usar dos conexiones, pero como leo de un Query a otro?
Gracias
__________________
El Conocimiento se puede compartir, pero la Experiencia es totalmente Intransferible.
Responder Con Cita
  #4  
Antiguo 07-09-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
NULL
 
Registrado: ago 2006
Posts: 7.659
Poder: 20
Caral Va por buen camino
Hola
Me imagino que igual que si usaras una sola conexión, no creo que sea diferente.
No lo he hecho nunca amigo, solo me imagino.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 07-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 29.028
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No sé si sqlite lo permite, algunas bases de datos sí, el trabajar con ambas a la vez, algo así como:
Código SQL [-]
insert into base2.tablaA (select * from base1.tablaA)

La forma clásica es lo que ha explicado Caral, tener 2 conexiones: (resumiendo mucho):

Código Delphi [-]
base1.open;
while not base1.eof do
begin
  insert into base2 values (base1.campo1, base1.campo2, base1.campo3);
  base2.post;
  base1.next;
end;
Responder Con Cita
  #6  
Antiguo 07-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.226
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Cita:
Empezado por Casimiro Notevi Ver Mensaje
No sé si sqlite lo permite, algunas bases de datos sí, el trabajar con ambas a la vez, algo así como:
Código SQL [-]
insert into base2.tablaA (select * from base1.tablaA)
Sí lo permite, pero primero hay que "importar" la segunda base:

Código SQL [-]
attach database "\ruta\a\la\base2.db" as base2

// Saludos
Responder Con Cita
  #7  
Antiguo 08-09-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
NULL
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 174
Poder: 7
martini002 Va por buen camino
Hoy me fui LEJOS donde no existiera la energia electrica, (Amazonia Venezolana)
y apuesto que muchos de nosotros quisiera irse, pero tan solo por un momento
porque seria una pena evitar recibir un halago como este que recibi cuando llegue:
"Martin, le vas a quitar el trabajo a los Administradores", aunque se que no sera verdad,
y menos yo; No porque menos-precie mi ezfuerzo o el de ustedes amigos mios,
sino que por tan solo; por AHORA no pasara, y solo nosotros sabemos porque,
y por tanto no respondi a este mensaje aunque hallan llegado muchas notificaciones,

me gustaria opinar sin aun probarlo, (aunque lo probare a primera hora)
Roman! Tienes toda la razon, me faltaba conocer esa sentencia,
donde importaras a memoria (Supongo yo!) toda la tabla,
y luego la manejaras a tu antojo, pues es lo que mas logica y sentido comun
puede tener, aunque no menos que las otras opiniones, pero si creo yo,
que absurdo seria no tener este problema en cuenta,
Importar una BD a Otra? despues de tantos años de investigacion sobre el asunto?
no creo que vallamos nosotros a inventar como hacerla, no se si me siguen,
pero bueno, no queria dejar este momento para escribirles.

A primera hora estare haciendo las pruebas correspondientes!
como buen curioso e informatico caprichoso

Gracias Roman y a todos
__________________
El Conocimiento se puede compartir, pero la Experiencia es totalmente Intransferible.
Responder Con Cita
  #8  
Antiguo 08-09-2012
ElMug ElMug is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 163
Poder: 7
ElMug Va por buen camino
En SQLite3 es facil.

Attach, como explico Roman, y usa el DUMP de la BD-1 a un archivo DumpX. Luego todo el archivo DumpX (que son comandos SQL en texto comun) lo aplicas a la BD-2. Esto te crea la tabla y seguidamente le carga los datos.

En estos Dumps puedes inclusive pasar TODA una base de datos a otra.

Sin embargo, con SQLite3, puede siempre usarse una base de datos que este "attached" como si ya fuera solo una. Ese principio aumenta la capacidad de multiaccesos para escribir: procesos escribiendo en BD-1 no bloquean BD-2, pues son archivos fisicamente independientes.
Responder Con Cita
  #9  
Antiguo 10-09-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
NULL
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 174
Poder: 7
martini002 Va por buen camino
Saludos,

Estuve haciendo unas pruebas, pero no se me ocurre mas nada,
y aun no he podido encontrar algun ejemplo de alguien que lo halla hecho antes
miren lo que he estado haciendo, al parecer importa la BD correctamente,
porque no me da ningun error, y de paso estoy viendo cual es la base de datos conectada
actualmente, lo que me muestra que SI esta conectada la numero 1 (Hola)
pero cuando entra al proceso de copiar los datos entonces da un error,
ya las dos estan creadas, lo hice con una misma conexion,
aun no he intentado con dos, pero creo que no hace falta,
por lo menos no hasta este paso, pues las crea correctamente
que creen que pueda estar fallando aqui?

Gracias

Código Delphi [-]
procedure TForm7.Button4Click(Sender: TObject);
var
a:string;
begin
  ZQuery1.Close;
  ZQuery1.SQL.Text:='Attach Database "F:\Mundo.sqlite" as Mundo';
  ZQuery1.Open;
  ZQuery1.Close;
  A:=ZConnection1.Database;
  ShowMessage(a);//Esto muestra: F:\Hola.sqlite
  ZQuery1.SQL.Text:='Insert Into Mundo.Prueba (Select * From Hola.Prueba)';//Aqui da el error de Missing Database o una sentencia incorrecta.
  ZQuery1.Open;
end;
__________________
El Conocimiento se puede compartir, pero la Experiencia es totalmente Intransferible.
Responder Con Cita
  #10  
Antiguo 11-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 29.028
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por martini002 Ver Mensaje
pero cuando entra al proceso de copiar los datos entonces da un error,
Hombre, si quieres que alguien que sepa del tema te ayuda... no hagas que tenga que adivinar el error
Responder Con Cita
  #11  
Antiguo 11-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.226
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Y, ¿ZQuery está conectado a ZConnection?

// Saludos
Responder Con Cita
  #12  
Antiguo 11-09-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
NULL
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 174
Poder: 7
martini002 Va por buen camino
Casimiro eso lo se, el error esta expresado en el codigo

Código Delphi [-]
ZQuery1.SQL.Text:='Insert Into Mundo.Prueba (Select * From Hola.Prueba)';//Aqui da el error de Missing Database o una sentencia incorrecta.

Si Roman, esta conectado el ZQuery1 al ZConnection1
Gracias
__________________
El Conocimiento se puede compartir, pero la Experiencia es totalmente Intransferible.
Responder Con Cita
  #13  
Antiguo 11-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 29.028
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por martini002 Ver Mensaje
Casimiro eso lo se, el error esta expresado en el codigo
Con mi configuración de colores no veía esa parte, salía del mismo color que el fondo.
Lo he visto al "citar", que sale en letra negra.
Responder Con Cita
  #14  
Antiguo 11-09-2012
ElMug ElMug is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 163
Poder: 7
ElMug Va por buen camino
No creo que en ese query puedas ejecutar comandos que no sean de "traer" datos. Necesitas algo que relacione "update", o "execute". Tal vez hasta un componente mas para lograrlo.
Responder Con Cita
  #15  
Antiguo 11-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.226
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Con mi configuración de colores no veía esa parte, salía del mismo color que el fondo.
Lo he visto al "citar", que sale en letra negra.
¿Te das cuenta de que te has perdido todos los comentarios de código?

// Saludos
Responder Con Cita
  #16  
Antiguo 11-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 29.028
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
¿Te das cuenta de que te has perdido todos los comentarios de código?
Bueno, creo que poco tiempo, hace unos días estuve instalando unos "temas" y dejándolo a mi gusto (después de la instalación del sistema en un disco nuevo), por lo que han sido sólo 2 ó 3 días
Responder Con Cita
  #17  
Antiguo 11-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.226
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Cita:
Empezado por martini002 Ver Mensaje
Código Delphi [-]
procedure TForm7.Button4Click(Sender: TObject);
var
a:string;
begin
  ZQuery1.Close;
  ZQuery1.SQL.Text:='Attach Database "F:\Mundo.sqlite" as Mundo';
  ZQuery1.Open;
  ZQuery1.Close;
  A:=ZConnection1.Database;
  ShowMessage(a);//Esto muestra: F:\Hola.sqlite
  ZQuery1.SQL.Text:='Insert Into Mundo.Prueba (Select * From Hola.Prueba)';//Aqui da el error de Missing Database o una sentencia incorrecta.
  ZQuery1.Open;
end;
Yo puedo hacer esto sin problemas:

Código Delphi [-]
ZQuery1.SQL.Text := 'attach database "\ruta\a\la\base2.db" as base2';
ZQuery1.ExecSQL;

ZQuery1.SQL.Text := 'insert into base2.tablaA (select * from base1.tablaA)';
ZQuery1.ExecSQL;

Pero claro, si pongo Open en lugar de ExecSQL, obtengo errores

// Saludos
Responder Con Cita
  #18  
Antiguo 11-09-2012
ElMug ElMug is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 163
Poder: 7
ElMug Va por buen camino
Si. Gracias Roman.

A esto me referia, mas sin detalles, por no ser usuario de los Zeos.
Responder Con Cita
  #19  
Antiguo 11-09-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
NULL
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 174
Poder: 7
martini002 Va por buen camino
Asi es Roman, siempre se me pasa ese ExecSQL;
pero fijate lo puse asi y me da un error de sintaxis cerca del Select

Código Delphi [-]
ZQuery1.SQL.Text := 'attach database "\ruta\a\la\base2.db" as base2';
ZQuery1.ExecSQL;

ZQuery1.SQL.Text := 'insert into base2.tablaA (select * from base1.tablaA)';
ZQuery1.ExecSQL;

Cita:
'SQL Error: near "Select": syntax error'
__________________
El Conocimiento se puede compartir, pero la Experiencia es totalmente Intransferible.
Responder Con Cita
  #20  
Antiguo 11-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.226
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Sí, pegué algo que no es correcto. Pon así la seguda sentencia:

Código Delphi [-]
ZQuery1.SQL.Text := 'insert into base2.tablaA select * from tablaA';

// Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Insertar datos entre bases de datos diferentes franjero Firebird e Interbase 1 19-06-2012 08:32:42
Pasaje de datos entre bases de datos Mauro Daniel Conexión con bases de datos 1 04-05-2008 15:28:24
Operaciones entre bases de datos subzero MS SQL Server 3 17-01-2008 21:55:57
Enlaces entre Bases de Datos!! Chik_Electronik C++ Builder 3 01-06-2006 05:00:37
conexión entre distintas bases de datos jsanchez Firebird e Interbase 1 09-03-2004 22:35:22


La franja horaria es GMT +2. Ahora son las 02:31:14.


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