[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