Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Copiar datos entre Bases de Datos (https://www.clubdelphi.com/foros/showthread.php?t=80166)

martini002 11-09-2012 21:39:16

Exacto, tiene mucho sentido porque el ZConnection esta conectado a la BD Hola,
y dentro hay una tabla prueba, pero me sigue dando el mismo error, asi quedo

Código Delphi [-]
procedure TForm7.Button4Click(Sender: TObject);
begin
  ZQuery1.Close;
  ZQuery1.SQL.Text:='Attach Database "F:\Mundo.sqlite" as Mundo';
  ZQuery1.ExecSQL;
  ZQuery1.SQL.Text:='Insert Into Mundo.Prueba (Select * From Prueba)';
  ZQuery1.ExecSQL;
end;

roman 11-09-2012 21:47:04

Quita esos paréntesis alrededor del select.

// Saludos

martini002 11-09-2012 21:56:37

Quedo perfecto, gracias infinitas amigo Roman,

asi quedo: para copiar de una base de datos a otra,

Código Delphi [-]
procedure TForm7.Button4Click(Sender: TObject);
begin
  ZQuery1.Close;
  ZQuery1.SQL.Text:='Attach Database "F:\Mundo.sqlite" as Mundo';
  ZQuery1.ExecSQL;
  ZQuery1.SQL.Text:='Insert Into Mundo.Prueba Select * From Prueba';
  ZQuery1.ExecSQL;
end;

pero eso es solo para hacerlo una vez,
ya que cuando le vuelves a dar, te da un error,
la base de datos Mundo ya esta en uso:

Cita:

'SQL Error: database Mundo is already in use'.
como se puede validar para saber si esta o no en uso?
entonces asi evitar el attach nuevamente?

Gracias

roman 11-09-2012 22:12:30

Bueeeno, pero es que no está accesible la ayuda desde tu IP? :p

Código Delphi [-]
ZQuery1.SQL.Text := 'pragma database_list';
ZQuery1.Open;

if not ZQuery1.Locate('name', 'Mundo', []) then
begin
  ZQuery1.SQL.Text := 'attach database "F:\Mundo.sqlite" as Mundo';
  ZQuery1.ExecSQL;
end;

// Saludos

martini002 11-09-2012 23:51:41

Excelente Roman,

si tengo acceso a esa ayuda pero te confieso,
leer eso es como leer chino con aleman,
entiendo ingles pero eso es un lenguaje muy tecnico y me confunde bastante,
tampoco se mucho como buscar alli, nunca me imagine que con Pragma podria hacer eso,

al final quedo asi, para quien pueda servir
copiar de una base de datos a otra usando SQLite y Zeos en Delphi
Código Delphi [-]
procedure TForm7.Button4Click(Sender: TObject);
begin
  ZQuery1.SQL.Text := 'Pragma DataBase_List';//Cargo la lista de bases de datos añadidas
  ZQuery1.Open;
  if not ZQuery1.Locate('Name', 'Mundo', []) then//sino consigue la BD que necesito entonces la agrega
    begin
      ZQuery1.Close;
      ZQuery1.SQL.Text:='Attach Database "F:\Mundo.sqlite" as Mundo';
      ZQuery1.ExecSQL;
    end;
  ZQuery1.SQL.Text:='Insert Into Mundo.Prueba Select * From Prueba';//luego inserto la informacion de una a otra BD y listo el pollo!
  ZQuery1.ExecSQL;
end;

Gracias a todos por sus aportes esto me fue realmente util como todo
Saludos

martini002 06-12-2012 00:07:48

Saludos,

Hoy volvi a tener este mismo problema,
y lo resolvi asi:

Código Delphi [-]
  //Agregamos la BDT
  ZQuery3.Close;
  ZQuery3.SQL.Text:='Attach Database "'+GetCurrentDir()+'\BD\BDLGST.lum" as BDLGST';
  ZQuery3.ExecSQL;

  //Copiamos de la BDT a BDG
  ZQuery3.Close;
  ZQuery3.SQL.Text:='Insert Into RelacionUnidades Select * From BDLGST.RelacionUnidades';
  ZQuery3.ExecSQL;

Solo queria comentarlo quiza a alguien le sirva :)


La franja horaria es GMT +2. Ahora son las 16:03:01.

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