Transferência de dados através de arquivos .txt - Parte IV

Ainda que a troca de informações entre sistemas modernos utilizem XML, sistemas legado ainda utilizam arquivos texto para o mesmo pretexto. Logo os sistemas modernos devem gerar arquivos texto para se comunicar com sistemas legados.

Transferência de dados através de arquivos .txt - Parte IV




Iniciando um novo projeto para transmitir os dados (cont.)


Entrando com código para gerar o arquivo de transferência

 

Agora para concluir o programa de transferência de dados devemos entrar com o código que irá gerar o arquivo desejado de acordo com o layout proposto.  Dê um clique duplo no BtnGerar para criar o evento OnClick.  Dentro do evento coloque a Listagem 1.

* Todo o código está comentado para melhor compreensão.

 

procedure TFTransf.BtnGerarClick(Sender: TObject);

var

  // Variável do tipo arquivo

  ArqTransf: TextFile;

  Cont, Lin, Reg1, Reg2: Integer;

begin

  /////////////////////////////////////////////////////////////

  //                                                         //

  // Lembrete : Serão adotados os formatos  preestabelecidos //

  //   no layout                                             //

  //                                                         //

  // Obs. : Para identificar que dados estamos informando    //

  //   colocaremos apenas os nomes dos campos informados no  //

  //   layout criado                                         //

  //                                                         //

  /////////////////////////////////////////////////////////////

 

  // Inicializando os contadores

  Lin := 0;

  Reg1 := 0;

  Reg2 := 0;

 

  // Informando a variável ArqTransf o

  // nome do arquivo que será gerado

  AssignFile(ArqTransf, 'Transf.txt');

 

  // Inicializando o arquivo de transferência

  Rewrite(ArqTransf);

 

  // Incrementando o contador de linhas

  Inc(Lin);

 

  // Incluindo uma nova linha no arquivo de transferência

  // Registro Tipo 0

  WriteLn(ArqTransf,

    // Tipo

    '0' +

    // DtGera

    FormatDateTime('yyyyymmdd', Now) +

    // HsGera

    FormatDateTime('hhmmss', Now) +

    // Versão

    '1.0.0' +

    // Brancos

    PreencherStr(' ', ' ', 170, False) +

    // Linha

    PreencherStr(IntToStr(Lin), '0', 5, True ));

 

  // Abrindo a conexão com a base de dados

  SQLConnec.Connected := True;

 

  ///////////////////////////////////////

  //                                   //

  // Inicio da transferência dos dados //

  //                                   //

  ///////////////////////////////////////

 

  // Quando a variável "Cont" for igual a 1 estaremos utilizando a

  // tabela "Cliente".  Quando o seu valor for 2 passaremos a usar

  // a tabela "Produto"

  // Cont = 1 --> Tabela Cliente

  // Cont = 2 --> Tabela Produto

  for Cont := 1 to 2 do

    begin

      // Abrindo tabela de cliente

      SQLQuery.SQL.Clear;

      case Cont of

        // Utilizando a tabela "Cliente"

        1:SQLQuery.SQL.Add('select * from Cliente');

        // Utilizando a tabela "Produto"

        2:SQLQuery.SQL.Add('select * from Produto');

      end;

 

      // Para melhor compreenção não utilizarei o "with ClientDataSet do"

      ClientDataSet.Active := False;

      ClientDataSet.Active := True;

 

      // Preparando o TProgressBar para mostrar o progresso

      // da transferência dos dados

      PBarGerar.Position := 0;

      PBarGerar.Max := ClientDataSet.RecordCount;

 

      // Entra no loop dos registros da tabela atual

      // até chegar no fim do arquivo - Eof (End of file)

      while not(ClientDataSet.Eof) do

        begin

          // Incrementando o contador de linhas

          Inc(Lin);

 

          case Cont of

            // Utilizando a tabela "Cliente"

            1:begin

                // Incrementando o contador do Registro Tipo 1

                Inc(Reg1);

 

                // Incluindo uma nova linha no arquivo de transferência

                // Registro Tipo 1

                WriteLn(ArqTransf,

                  // Tipo

                  '1' +

                  // Codigo

                  PreencherStr(ClientDataSet.FieldByName('Codigo').AsString,

                    '0', 5, True) +

                  // CPF

                  PreencherStr(ClientDataSet.FieldByName('CPF').AsString,

                    ' ', 14, False) +

                  // Nome

                  PreencherStr(ClientDataSet.FieldByName('Nome').AsString,

                    ' ', 50, False) +

                  // Endereço

                  PreencherStr(ClientDataSet.FieldByName('Ender').AsString,

                    ' ', 50, False) +

                  // Bairro

                  PreencherStr(ClientDataSet.FieldByName('Bairro').AsString,

                    ' ', 30, False) +

                  // Cidade

                  PreencherStr(ClientDataSet.FieldByName('Cidade').AsString,

                    ' ', 30, False) +

                  // UF

                  PreencherStr(ClientDataSet.FieldByName('UF').AsString,

                    ' ', 2, False) +

                  // DtNasc

                  FormatDateTime('yyyyymmdd',

                    ClientDataSet.FieldByName('DtNasc').AsDateTime)+

                  // Linha

                  PreencherStr(IntToStr(Lin), '0', 5, True));

              end;

            // Utilizando a tabela "Produto"

            2:begin

                // Incrementando o contador do Registro Tipo 2

                Inc(Reg2);

                // Incluindo uma nova linha no arquivo de transferência

                // Registro Tipo 1

                WriteLn(ArqTransf,

                  // Tipo

                  '2' +

                  // Codigo

                  PreencherStr(ClientDataSet.FieldByName('Codigo').AsString,

                    ' ', 13, False) +

                  // Descr

                  PreencherStr(ClientDataSet.FieldByName('Descr').AsString,

                    ' ', 50, False) +

                  // Valor

                  PreencherStr(RemoverChar(Format('%1.2f', [

                    ClientDataSet.FieldByName('Valor').AsCurrency]),

                    DecimalSeparator), '0', 15, True) +

                  // Brancos

                  PreencherStr(' ', ' ', 111, False) +

                  // Linha

                  PreencherStr(IntToStr(Lin), '0', 5, True));

              end;

          end;

 

          // Pula para o próximo registro da tabela atual

          ClientDataSet.Next;

 

          // Incrementa o TProgressBar

          PBarGerar.Position := PBarGerar.Position + 1;

 

          // Delay apenas para mostrar a evolução do TProgressBar

          // pois os arquivos são muito pequenos e sem ele não veriamos

          // essa evolução.  Sua remoção não causará efeito algum

          // ao resultado final do arquivo de transferência

          Sleep(100);

        end;

    end;

 

  // Incrementando o contador de linhas

  Inc(Lin);

 

  // Incluindo uma nova linha no arquivo de transferência

  // Registro Tipo 9

  WriteLn(ArqTransf,

    // Tipo

    '9' +

    // Reg1

    PreencherStr(IntToStr(Reg1), '0', 5, True) +

    // Reg2

    PreencherStr(IntToStr(Reg2), '0', 5, True) +

    // Brancos

    PreencherStr(' ', ' ', 179, False) +

    // Linha

    PreencherStr(IntToStr(Lin), '0', 5, True));

 

  // Fechando o arquivo de transferência

  CloseFile(ArqTransf);

 

  ShowMessage('Arquivo gerado');

end;

Listagem 1 – Código inserido dentro do evento OnClick do BtnGerar


Devido tamanho, esta parte continua no próximo artigo. Obrigado!!!


Artigo criado por http://www.cassic.com.br/

 

Artigos relacionados