Galera, este artigo se divide em duas partes básicas e uma terceira mais complexa. Esta primeira parte se trata de exporte de um arquivo e alguns conceitos. A segunda parte iremos importar este arquivo. E por fim, a terceira engloba essas duas e mais um pouco de importe e exporte mais complexos. Então Vamos Lá!!!
Me responda: Quem nunca precisou que uma informação fosse
gerada de um lugar para o outro sem precisar de uma rede e como se fosse uma
maquininha
automática?
Hoje em dia essa é a nossa realidade!!! Exportar e Importar arquivos,
sejam eles, do próprio ou de
algum outro sistema.
E como exportar os dados?!
Existem diversas formas de exportar uma informação, como por
exemplo, posso definir posições fixas, posso ter delimitador
de caracteres, entre outras, e esse tipo de definição é chamados
por nós de layout.
Primeiramente, precisaremos definir qual tipo de layout iremos adotar?
Neste exemplo iremos adotar o layout de posições, ele é um
layout simples onde definiremos as posições dos dados. E usaremos
uma procedure auxiliar que irá nos ajudar com os campos que não
são de preenchimento obrigatório. Faremos com que independente
do campo estar preenchido, ele fique em uma posição definida.
Certo? Mãos á obra então!
Neste artigo irei utilizar um banco em Acess que vem com o Delphi chamado
dbdemos.mdb, e iremos exportar os dados da tabela Customer. Utilizarei
a camada ADO.
No Delphi, Clique em File -> New -> Application;
No Formulário coloque um componente - ADOConnection da paleta ADO
Mude a propriedade LogimPrompt para False.
Renomeie o componente para Conn.
Clique duas vezes em ConnectionString e Siga os procedimentos das imagens:

Clique em “Build...”

Escolha “Microsoft Jet 4.0 OLE DB Provider” e clique em “Next>>”

Selecione o Banco, geralmente em:
C:\Arquivos de programas\Arquivos comuns\Borland Shared\Data\dbdemos.mdb
E Clique em “Test Connection”.
Caso o teste seja efetuado corretamente clique em “OK” e suas configurações
estão corretas, senão verifique suas configurações
do Banco.
Voltando para o Delphi, coloque na propriedade Connected do Componente Conn
para True.
Colque um Componente ADOTable da paleta ADO.
E Mude suas Propriedades :
Connection = Conn
Name = TbCust
TableName = customer
Clique duas vezes no componente TbCust, uma nova tela será exibida,
nesta nova tela clique em “Add all Fields”

Deixe seu formulário parecido com a figura abaixo:

Pronto!!!
Vamos aos Códigos....
Declare na seção private a seguinte procedure
function PadR(cStr: String; nSize: Integer; cCar: String): String;
Ela nos ajudará a formatar as posições.
Pressione CTRL+SHIFT+C para implemeta-la e faça da seguinte forma:
function TForm1.PadR(cStr:
String; nSize: Integer; cCar: String): String;
var
nFor, nAux: Integer;
cAux: String;
begin
cAux := Trim(cStr);
nAux := Abs(Length(cAux)-nSize)-1;
for nFor := 0 to nAux do
cAux := cAux+cCar;
Result := cAux;
end;
Nesta procedure passamos a string que desejamos formatar, quantas posições
ela deverá ter e por último o caracter que será nosso
coringa. Em meus sistemas normalmente eu gero uma sugestão para o nome,
então
no OnShow do Formulário digite:
var
Data : String;
begin
Data := DateToStr(Date);
edtCaminho.Text := 'C:\'
+ 'Exporte' + Copy(Data , 1 , 2) +
Copy(Data , 4 , 2) +
Copy(data , 7 , 4) + '.EXP';
Repare que sugeri uma extensão para este nosso arquivo, mas por quê?!
Pense na hora do "Importe". Este arquivo poderia ser um .txt, mas aí poderia
ser aberto no bloco de notas com qualquer clique pelo usuário. Coloco
a extensão
pois quando surge aquela telinha de tipo de extensão
o usuário pensa duas vezes em abri-lo, e outra coisa, na hora de importar,
poderemos fazer um filtro para mosrtar somente os arquivos
com a extensões sugerida.
Vamos agora gerar nosso Exporte, clicando duas vezes no botão btnExp.
Declare duas variáveis:
var
Caminho : String; //Será Responsável pelo caminho do
nosso arquivo
mArq : TextFile; //É o nosso arquivo em
si
begin
//Vamos criar o arquivo
e abri-lo para gravação:
AssignFile(mArq,
Caminho); //Cria o Arquivo
Rewrite(mArq); {Abre para gravação}
//Defina
que a variável caminho é nosso
edit
Caminho := edtCaminho.text
//Agora
precisamos abrir a tabela;
TbCust.Open;
//Depois
de Abrir a Tabela, defina:
pb.Max :=
TbCust.RecordCount;
//Vamos
agora fazer um loop para que insira neste
//nosso arquivo as informações
da tabela.
while not TbCust.Eof do
Begin
Writeln( marq ,
Padr(Copy(FloatToStr(TbCustCustNo.Value) , 1 , 6), 6
, ' ') + ' ' +
Padr(Copy(TbCustCompany.Value , 1, 30), 30 , ' ') + '
' +
Padr(Copy(TbCustAddr1.Value , 1 , 30), 30 , ' ') + '
' +
Padr(Copy(TbCustAddr2.Value , 1 , 30), 30 , ' ') + '
' +
Padr(Copy(TbCustCity.Value , 1, 15 ), 15 , ' ') + ' '
+
Padr(Copy(TbCustState.Value, 1 , 20 ), 20 ,' ') + ' '
+
Padr(Copy(TbCustZip.Value , 1 , 10 ), 10 , ' ') + ' '
+
Padr(Copy(TbCustCountry.Value , 1 , 20), 20 , ' ') +
' ' +
Padr(Copy(TbCustPhone.Value, 1 , 15 ), 15 , ' ') + '
' +
Padr(Copy(TbCustFAX.Value, 1 , 15 ), 15 , ' ') + ' '
+
Padr(Copy(FloatToStr(TbCustTaxRate.Value), 1, 6), 6 ,
' ') + ' ' +
Padr(Copy( TbCustContact.Value, 1 , 20), 20 , ' ') +
' ' +
DateToStr(TbCustLastInvoiceDate.Value));
ProgressBar1.Position := ProgressBar1.Position + 1;
TbCust.Next;
End;
//E para Concluir:
ShowMessage('Processo
Concluído!!!');
Close;
end;
Perguntas Freqüentes:
- Por que dou um Copy?
Porque não encontrei outra forma de fazer isso utilizando o ADO
- Por que uso o Padr?
Para formatar o campo com as posições corretas.
Não se esqueçam de implementar outras rotinas, como por exemplo,
verificar se o arquivo já existe, se o campo está em
branco e coisas do tipo. Uma dica vai abaixo, para verificar se o arquivo
existe:
if FileExists(Caminho) Then
if MessageBox(Handle, 'O Arquivo Já Existe. Deseja Substitui-lo?!',
'**** CUIDADO *****', MB_ICONWARNING or MB_YESNO or MB_DEFBUTTON2) = idYes
then
DeleteFile(Caminho)
else
Exit;
Espero que tenham gostado!
Aguardem o próximo artigo para aprendermos
a Importar estes nossos dados.
Estarei à disposição em:
Email: fernando_tremonti@yahoo.com.br
Site: www.guardiansofhell.cjb.net
Abraços...
|