DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 
DevWare  
Novidade: DevMedia lança o DevWare - Saiba mais!

Exportando / Importando dados do FB / IB

Veja neste artigo como criar uma aplicação simples para importar / exportar dados do Firebird / InterBase, onde utilizaremos componentes da paleta InterBase do Delphi.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você gostaria de comentar o que não lhe agradou?

Um dos assuntos mais procurados em fóruns e listas de discussões na área de desenvolvimento com banco de dados, sem dúvida é a exportação de dados entre tabelas do mesmo banco ou até mesmo entre bancos diferentes.

Mostrarei neste artigo como criar uma aplicação simples para importar / exportar dados do Firebird / InterBase, onde utilizaremos componentes da paleta InterBase do Delphi.

Crie uma nova aplicação no Delphi e coloque os seguintes componentes: um IBDatabase, um IBTransaction e um IBSQL. Vincule os componentes, conforme o diagrama da Figura 1. Nesse exemplo utilizaremos o banco Employee.fdb que acompanha a instalação do Firebird.

 

Figura 1. Ligação dos componentes de acesso a dados.

Coloque um BitBtn no formulário e adicione o seguinte código no evento OnClick:

var
  Output: TIBOutputRawFile;
begin
  IBSQL1.SQL.Text := 'select CUST_NO, CUSTOMER, CITY from CUSTOMER';
  Output := TIBOutputRawFile.Create;
 
try
    Output.Filename := 'C:\export.exp';
    IBSQL1.BatchOutput(Output);
 
finally
    Output.Free;
  end;
  ShowMessage('Exportação realizada com sucesso');
end;

A classe TIBOutputRawFile provê mecanismos para a exportação de arquivos, através da propriedade FileName, onde podemos especificar uma extensão (nesse caso salvamos como “*.exp”, mas poderíamos usar outro), e utilizamos o método BatchOutput para realizar a exportação. No IBSQL selecionamos os dados, através da instrução SQL apropriada. Rode a aplicação e faça a exportação dos dados.

Importando os dados

Vamos importar os dados do arquivo criado anteriormente (export.exp). Adicione mais dois BitBtns, um Edit e um OpenDialog. Acrescente o seguinte código no botão que irá localizar o arquivo de exportação:

if OpenDialog1.Execute then
  Edit1.Text := OpenDialog1.FileName;

Caso seja selecionado um arquivo no OpenDialog, atribuímos o caminho do arquivo na propriedade Text do Edit.

Você pode utilizar os mesmos componentes de acesso ao banco nesse exemplo, mas lembre-se de alterar o banco de destino. No botão de importação, adicione o seguinte código:

var
  Input: TIBInputRawFile;
begin
  IBSQL1.SQL.Text := 'insert into CUSTOMER values (:CUST_NO, :CUSTOMER, :CITY)';
  Input := TIBInputRawFile.Create;
 
try
    Input.Filename := Edit1.Text;
    IBSQL1.BatchInput(Input);
 
finally
    Input.Free;
  end;
  ShowMessage('Importação realizada com sucesso');
end;

Note que o código é praticamente o mesmo, diferenciando apenas a classe que trabalhara com a importação (TIBInputRawFile), a instrução SQL e o arquivo que esta na propriedade Text do Edit.

Aqui vale uma dica muito importante: para que a importação ocorra perfeitamente, os campos de destino têm que ter o mesmo nome, tipo de dados e ordem na tabela, caso contrário ocorrerá erros ao inserir os dados. Rode a aplicação e importe o arquivo gerado anteriormente (Figura 2).

 

Figura 2. Importando o arquivo com os dados.

Veja na Figura 3 os dados importados em uma tabela criada com a mesma estrutura da instrução SQL.


Figura 3. Dados importados em outro banco de dados.

Criando arquivos com delimitador (TAB)

Podemos utilizar um delimitador quando da exportação de dados, através da classe TIBInputDelimitedFile. A técnica utilizada nesse exemplo é praticamente igual a anterior, diferenciando é claro do código dos botões Exportar e Importar, como vemos a seguir:

Exportar

var

  Delimitador: TIBOutputDelimitedFile;
begin
  IBSQL1.SQL.Text := 'select CUST_NO, CUSTOMER, CITY from CUSTOMER';
  Delimitador := TIBOutputDelimitedFile.Create;
  try
    Delimitador.Filename := 'C:\export_delim.exp';
    IBSQL1.BatchOutput(Delimitador);
  finally
    Delimitador.Free;
  end;
  ShowMessage('Exportação realizada com sucesso');
end;
Importar
var
  Delimitador: TIBInputDelimitedFile;
begin
  IBSQL1.SQL.Text := 'insert into CUSTOMER values (:CUST_NO, :CUSTOMER, :CITY)';
  Delimitador := TIBInputDelimitedFile.Create;
  try
    Delimitador.Filename := Edit1.Text;
    IBSQL1.BatchInput(Delimitador);
  finally
    Delimitador.Free;
  end;
  ShowMessage('Importação realizada com sucesso');
end;

O delimitador padrão é o TAB, mas podemos alterar, através da propriedade ColDelimited. Como no código a seguir, onde alteramos o delimitador para ponto-e-vírgula (;):

Delimitador. ColDelimited := ' ; ';

Os testes realizados com ponto-e-vírgula não foram muito bons na importação dos dados, por isso recomendo utilizar o delimitador padrão (TAB). Veja na Figura 4, como fica o arquivo gerado pelo código de exportação com o delimitador.


Figura 4. Arquivo exportado utilizando TAB como delimitador.

Clique aqui para fazer o download do arquivo.


Luciano Almeida [devmedia Videos]
Técnico em Processamento de Dados, desenvolvedor Delphi/C#. Autor de mais de 60 artigos e 300 vídeo aulas sobre Delphi, C#, banco de dados e ASP.NET. Palestrante da 4ª edição da Borland Conference (BorCon). Desenvolvedor ASP.NET da Paradigma Web Bussiness em Florianópolis-SC.
O que você achou deste post?

    5 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Rinaldo
Onde estão as imagens citadas?
[há +1 ano] - Responder

 

Romulo
Olá! Gostaria de saber como faço para exportar somente 2 campos da tabela? Já tentei com o mesmo código do exemplo. URGENTE!!!!!
[há +1 ano] - Responder

 

Edmar
Olá, gostaria de saber como faço para importar dados de um arquivo txt com delimitadores
[há +1 ano] - Responder

 

Marcos Aurelio
Foi testado o código, e a parte de importação retorna um erro dizendo que o número de colunas não é condizente com o número de registros, não consegui resolver, alguém pode ajudar!
[há +1 ano] - Responder
 

Daniel
Boa a dica! Funciona sem problemas... Abraço!
[há +1 ano] - Responder

 
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
[Fechar] Você precisa estar logado para dar seu feedback.

Clique aqui para efetuar o login

Caso não tenha um cadastro DevMedia, clique aqui para se cadastrar (gratuito)
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03