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 11-01-2006
chema chema is offline
Registrado
 
Registrado: ene 2006
Posts: 2
Poder: 0
chema Va por buen camino
Angry Pasar datos de un gdb a otro gdb (Interbase)



Hola,

Tengo dos bases de datos Interbase 6.0 y necesito pasar datos de forma masiva de una GDB a otra GDB mediante programación y de la forma mas rápida posible.

He intentado con dos objetos SQL (cada uno apuntando a una GDB) y realizando select en uno e insert en otro pero el proceso es muy lento. ¿Hay alguna forma de hacerlo mas ágil?
Responder Con Cita
  #2  
Antiguo 11-01-2006
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Hola:

Quizás te sirva DataPum, busca con esta palabra en el foro o en Google.

Un saludo.
Responder Con Cita
  #3  
Antiguo 11-01-2006
Migpal Migpal is offline
Miembro
 
Registrado: jul 2005
Ubicación: Colombia
Posts: 91
Poder: 19
Migpal Va por buen camino
Prefiero hacerlo por script, recorres las tablas y generas el script, de esta manera te queda un backup de lo que pasas.
Responder Con Cita
  #4  
Antiguo 16-01-2006
chema chema is offline
Registrado
 
Registrado: ene 2006
Posts: 2
Poder: 0
chema Va por buen camino
Red face ¿Como hacerlo?

Hola,

He realizado scripts dentro de una GDB, pero como dices de hacerlo?

¿Me puedes poner un ejemplo?

Gracias
Responder Con Cita
  #5  
Antiguo 16-01-2006
Avatar de Thales
Thales Thales is offline
Miembro
 
Registrado: ago 2005
Posts: 48
Poder: 0
Thales Va por buen camino
Estoy en una situación similar a la tuya y, aprovechando la idea de Migpal, te pongo el código que he generado para hacer el script

Código Delphi [-]
unit Scripts;
 
interface
 
uses Classes, SysUtils, DB, Variants;
 
function GeneraScript(Table: string; D: TDataSet): string;
procedure Guarda(Script, FileName: string);
function ValorToStr(Clase: TFieldClass; Value: variant): string;
 
implementation
 
function GeneraScript(Table: string; D: TDataSet): string;
var
  I: integer;
  Campos, Valores: string;
begin
  with D do
  begin
    Open;
    Campos := '';
    for I := 0 to Pred(FieldCount) do
    begin
      if I > 0 then Campos := Campos + ', ';
        Campos := Campos + Fields[i].FieldName;
    end;
    Result := '';
    while not Eof do
    begin
      Valores := '';
      for I := 0 to Pred(FieldCount) do
      begin
        if I > 0 then Valores := Valores + ', ';
        with Fields[i] do
          Valores := Valores + ValorToStr(TFieldClass(ClassType), Value);
      end;
      Result := Result + Format('insert into %s(%s) values(%s);'#13#10,
        [Table, Campos, Valores]);
      Next;
    end;
    Close;
  end;
end;
 
procedure Guarda(Script, FileName: string);
begin
  with TFileStream.Create(FileName, fmCreate) do
  try
    Write(Script[1], Length(Script));
  finally
    Free;
  end;
end;
 
function ValorToStr(Clase: TFieldClass; Value: variant): string;
var
  SaveDecimalSeparator: Char;
begin
  Assert(not VarIsEmpty(Value));
  if VarIsNull(Value) then
    Result := 'Null'
  else if Clase.InheritsFrom(TStringField) then
    Result := QuotedStr(Value)
  else if Clase.InheritsFrom(TDateField) then
    Result := QuotedStr(FormatDateTime('mm/dd/yyyy', Value))
  else if Clase.InheritsFrom(TBCDField) or
    Clase.InheritsFrom(TFMTBCDField) then
  begin
    SaveDecimalSeparator := DecimalSeparator;
    try
      DecimalSeparator := '.';
      Result := FloatToStr(Value);
    finally
      DecimalSeparator := SaveDecimalSeparator;
    end;
  end
  else
    Result := Value;
end;

end.

Para usarlo, en el form principal pones un edit con el path, un listbox con las tablas de las que quieras recoger los datos y un botón.
En el evento OnClick del botón pones este código:

Código Delphi [-]
uses Scripts;
 
{$R *.dfm}
 
procedure TForm1.btGeneraClick(Sender: TObject);
var
  S: string;
  I: integer;
begin
  Screen.Cursor := crHourglass;
  try
    S := '';
    for I := 0 to Pred(lbTablas.Count) do
    begin
      S := S + '/* Tabla: ' + lbTablas.Items[i] + ' */'#13#10#13#10;
      qrOtros.SQL.Text := 'select * from '+lbTablas.Items[i];
      S := S + GeneraScript(lbTablas.Items[i], qrOtros) + #13#10;
    end;
    Guarda(S, ePath.Text);
  finally
    Screen.Cursor := crDefault;
  end;
end;

Última edición por Thales fecha: 16-01-2006 a las 18:08:32.
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
definir tipos de datos en Interbase. uper Firebird e Interbase 2 24-05-2005 20:36:40
pase de datos de access a interbase perillan Conexión con bases de datos 2 03-03-2005 20:55:30
Problemas con base de datos de Interbase Delphos PHP 2 23-06-2003 12:33:13
Refrescar datos de una DB Interbase Osorio Firebird e Interbase 1 07-06-2003 21:36:53
Instalar aplicación con base de datos de InterBase Tomás Firebird e Interbase 5 27-05-2003 16:29:18


La franja horaria es GMT +2. Ahora son las 05:51:32.


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