[firebase-br] importação exportação interbase external file

Claudir Pereira dos Santos claupers_dbrays em yahoo.com.br
Qui Maio 25 14:24:46 -03 2006


Oi pessoal. Depois de muito tempo de pesquisa consegui montar uma solução
para meu problema de importação e exportação de dados de uma base interbase
para outra. Durante este período de pesquisa encontrei muito material a
respeito, mas a maioria não trata sobre como realizar a importação do
arquivo na outra base, ou au menos não encontrei. Sei que para os mais
experientes isso tudo que vou passar é encheção de lingüiça, mas este peque
help destina-se aos iniciantes como eu.
1º passo: Criando a tabela em tempo de execução:

Supondo que a tabela que você possui na base é que exportar tenha a seguinte
estrutura:
TABELA_A_EXPORTAR
========================
Codigo                     integer,
Nome                       varchar(50),
DataNascimento        date
========================
Temos então:

procedure TDatamodule.DataModuleCreate(Sender: TObject);
var
   Tabelas: TStringList;

Begin
    Basededados.Connected:=True;
    Transacao.Active:=True;
    Tabelas := TStringList.Create;
    Try
        Basededados.GetTableNames(Tabelas); //Aqui pega o nome de todas as
tabelas existentes na base de dados
        if Tabelas.IndexOf('NOME_DA_TABELA_QUE_VOCÊ_VAI_CRIAR') = -1 then
// Se a tabela não existir faça....
            begin
                TibSql.Sql.Clear;
                TibSql.Sql.Add('Create Table NOME_DA_TAB_EXPORT external
file '+'''C:\ALGUMACOISA.TXT'''+'(ieCodigo char(12), ieNome char(50),
ieDataNascimento char(11)) ');
                TibSql.ExecQuery;
                Transacao.Commit;
            end; // Fim da criação da tabela;
    Finally
        Tabelas.Free; //Limpa o arquivo da memória
    end;

2º passo: Exportando sua tabela:

procedure TF_Export.BotaoexportarClick(Sender: TObject);
begin
     TibSql.Sql.Clear;
     TibSql.Sql.Add('Insert into NOME_DA_TAB_EXPORT(ieCodigo, ieNome,
ieDataNascimento) select Codigo, Nome, DataNascimento '+
         'From TABELA_A_EXPORTAR where  DataNascimento >='+
''''+FormatDateTime('MM/DD/YY',StrToDate(DATAQUALQUER.text))+''' ');
    TibSql.ExecQuery;
    Transacao.Commit;
    CopyFile(Pchar('C:\ALGUMACOISA.TXT'),Pchar('a:\ALGUMACOISA.TXT'),False);
//copia o arquivo gerado para o disquete
    Basededados.Connected:=False; //Fecha a base para que seja possivel
apagar o arquivo no hd
    if FileExists('C:\ALGUMACOISA.TXT') then
                DeleteFile('C:\ALGUMACOISA.TXT');//Aqui é deletado o arquivo
gerado na exportação, pois caso contrario na proxima exportação os arquivos
                                                                      //ja
exportados continuariam na tabela, e os novos seriam acrecentados a eles.
end;

3º passo: Importando sua tabela:

procedure TF_Export.BotaoimportarClick(Sender: TObject);
Var
    Data:String;
begin
    Basededados.Connected:=False; ////Fecha a base para que seja possivel
apagar o arquivo no hd
    if FileExists('C:\ALGUMACOISA.TXT') then
          DeleteFile('C:\ALGUMACOISA.TXT');//Aqui é deletado o arquivo caso
exita da importação anterior
    CopyFile(Pchar('A:\ALGUMACOISA.TXT'),Pchar('C:\ALGUMACOISA.TXT'),False);
//copia o arquivo do disquete para o hd. tem que ser no mesmo lugar que

//você especificou ao criar a tabela exter (External file etc.....)
  Basededados.Connected:=True;
  NOME_DA_TAB_EXPORT.Open;
  TABELA_A_EXPORTAR.Open; //Na verdade agora seria tabela a receber a
importação, mas na verdade as tabelas desta base tem que ser igual a da base
exportada
  NOME_DA_TAB_EXPORT.First;
    While Not(NOME_DA_TAB_EXPORT.Eof) Do
        Begin
            Codigo.Value:=  StrToInt(RTrim(iecodigo.Value));  //A função
Rtrim esta no fim deste help, sua função é tirar os espaços em branco a
direite
            Nome.Value:= Rtrim(IeNome.Value);
            Data:=corrigedt(ieDataNascimento.Value); // A função corrigeDt
esta no fim deste help, sua função é converter o formato de data 2005-05-30
para 30/05/2005
            If edata(data) Then // A função edata esta no fim deste help,
ela checa se a data é valida;
                DataNascimento.Value:= :=StrToDate(data);
            TABELA_A_EXPORTAR.Post;
            NOME_DA_TAB_EXPORT.Next;
        end;
        Transacao.commit;

end;

ANEXOS: FUNÇÕES USADAS


function edata(const S: string): boolean;
begin
  try
  StrToDate(S);
  Result := true;
  except
  Result := false;
  end;
end;

=================================

function einteiro(const S: string): boolean;
begin
  try
  StrToInt(S);
  Result := true;
  except
  Result := false;
  end;
end;
=================================
Function corrigedt (S :String) :String;  //Corrige formato de data
2005-05-30
var
 Datacor:String;
begin
Datacor :='' ;
Datacor := (S[9]+S[10]+'/'+S[6]+S[7]+'/'+s[1]+s[2]+s[3]+s[4]);
result:=(DataCor);
end;


================================
É isso Ai Pessoal, espero que tenha ajudado a algum navegante de primeira
viagem como eu. A gente se esbarra por ai. Até mais. Um abraço.

Claudir Pereira dos Santos
Técnico em Informáica
claupers_dbrays em yahoo.com.br


		
_______________________________________________________ 
Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. 
http://br.info.mail.yahoo.com/





Mais detalhes sobre a lista de discussão lista