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
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo