Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Pasar datos de un gdb a otro gdb (Interbase) (https://www.clubdelphi.com/foros/showthread.php?t=29071)

chema 11-01-2006 19:03:19

Pasar datos de un gdb a otro gdb (Interbase)
 
:confused:

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?

fidel 11-01-2006 20:19:27

Hola:

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

Un saludo.

Migpal 11-01-2006 20:40:07

Prefiero hacerlo por script, recorres las tablas y generas el script, de esta manera te queda un backup de lo que pasas.

chema 16-01-2006 10:35:47

¿Como hacerlo?
 
Hola,

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

¿Me puedes poner un ejemplo?

Gracias

Thales 16-01-2006 18:02:14

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;


La franja horaria es GMT +2. Ahora son las 22:09:49.

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