Re: [delphi-br] Importação ignora 1ª linha do arq uivo

2010-07-26 Por tôpico Marcos Bernardo
Comece do 0 (ZERO)

abraço
Marcos Bernardo

Em 26 de julho de 2010 09:05, Ralp Alves Bezerra ral...@gmail.comescreveu:



 Pois é Rubem, desculpe por não citar seu nome. Foram tantas as pessoas que
 tentaram ajudar que as vezes cometemos estes deslizes.

 Já no caso da importação, aqui realmente ele não reconhece a primeira linha
 do arquivo. Será que é por causa da extensão (.DCD)? Este é o padrão
 utilizado pelo tribunal aqui do Ceará.

 Abraço.


 De: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br [mailto:
 delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br] Em
 nome de Rubem Rocha
 Enviada em: sexta-feira, 23 de julho de 2010 15:21

 Para: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br
 Assunto: RES: [delphi-br] Importação ignora 1ª linha do arquivo
 Prioridade: Alta


 Analisei o fonte (que por sinal, fui eu que implementei inicialmente) e até
 rodei ele com um arquivo de exemplo que o Ralp mandou para mim na época.
 Não
 vi nada de anormal. Ele sempre pega todas as linhas do texto.

 Sds.

 -Mensagem original-
 De: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br mailto:
 delphi-br%40yahoogrupos.com.br delphi-br%2540yahoogrupos.com.br
 [mailto:delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.brmailto:
 delphi-br%40yahoogrupos.com.br delphi-br%2540yahoogrupos.com.br

 ] Em
 nome de Dirlei Dionísio
 Enviada em: sexta-feira, 23 de julho de 2010 12:19
 Para: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.brmailto:
 delphi-br%40yahoogrupos.com.br delphi-br%2540yahoogrupos.com.br
 Assunto: Re: [delphi-br] Importação ignora 1ª linha do arquivo

 Ler código dentro de email é terrível. Se vc colocar o código no Pastebin (
 http://pastebin.com) vai nos ajudar a te ajudar.

 --
 Dirlei Dionísio
 Novo artigo: // Não comente seu código
 http://MaisQueBomCodigo.blogspot.com

 Em 23 de julho de 2010 10:11, Ralp Alves Bezerra 
 ral...@gmail.comralprd%40gmail.com
 mailto:ralprd%40gmail.com ralprd%2540gmail.com escreveu:


 
 
  Nobres colegas,
 
  Recentemente tive um problema com a importação de um arquivo.
 
  Com a ajuda dos nobres colegas e o envio de um exemplo pelo Walter,
  consegui
  sanar o problema.
 
  A importação foi realizada. Porém, fazendo uma analise mais detalhada,
  notei
  que primeira linha do arquivo nunca é importada. Fica sempre faltando o
  primeiro registro do arquivo.
 
  Estou postando abaixo o código utilizado. Se alguns dos nobres colegas
  poder
  me ajudar fico grato.
 
  Abraço.
 
  unit ufAnaliseDados;
 
  interface
 
  uses
 
  Classes, Forms, DB, Controls, Grids, DBGrids, DBClient, DBXpress, FMTBcd,
 
  DBXAutoInc, Provider, SqlExpr, RXCtrls, RXDBCtrl, Buttons, ExtCtrls,
 
  XiPanel, Dialogs, JvDialogs, XiProgressBar;
 
  type
 
  TfrmSIMNE = class(TForm)
 
  XiPanel1: TXiPanel;
 
  btImportar: TSpeedButton;
 
  dbgDados: TDBGrid;
 
  DBGrid1: TDBGrid;
 
  srcDados: TDataSource;
 
  JvOpenDialog1: TJvOpenDialog;
 
  Barra: TXiProgressBar;
 
  procedure btImportarClick(Sender: TObject);
 
  private
 
  fDadosTratados: TStringList;
 
  fCdsDadosTratados: TClientDataSet;
 
  procedure PrepararDados;
 
  procedure AnalisarArquivo;
 
  procedure CriarDataSet;
 
  procedure LiberarDados;
 
  public
 
  constructor Create(AOwner: TComponent); override;
 
  destructor Destroy; override;
 
  end;
 
  var
 
  frmSIMNE: TfrmSIMNE;
 
  implementation
 
  uses SysUtils, uDM, uImportaProcesso;
 
  {$R *.dfm}
 
  { TfrmAnaliseDados }
 
  procedure TfrmSIMNE.CriarDataSet;
 
  var
 
  i: integer;
 
  lLinhaDados: TStringList;
 
  begin
 
  { Cria o ClientDataSet }
 
  fCdsDadosTratados := TClientDataSet.Create(Self);
 
  { Define os campos que o ClientDataSet terá }
 
  with fCdsDadosTratados.FieldDefs do
 
  for i := 1 to 16 do
 
  Add(Format('Campo%2.2d', [i]), ftString, 40);
 
  { Cria o ClientDataset com os campos definidos }
 
  fCdsDadosTratados.CreateDataSet;
 
  { Preenche o ClientDataSet com os dados tratados }
 
  lLinhaDados := TStringList.Create;
 
  try
 
  lLinhaDados.Delimiter := ',';
 
  lLinhaDados.QuoteChar := '';
 
  while fDadosTratados.Count  0 do
 
  begin
 
  fCdsDadosTratados.Append;
 
  lLinhaDados.DelimitedText := fDadosTratados[0];
 
  for i := 0 to 15 do
 
  fCdsDadosTratados.Fields[i].AsString := lLinhaDados[i];
 
  fDadosTratados.Delete(0);
 
  end;
 
  finally
 
  lLinhaDados.Free;
 
  end;
 
  { Vincula o ClientDataSet ao DataSource associado ao DBGrid }
 
  srcDados.DataSet := fCdsDadosTratados;
 
  end;
 
  procedure TfrmSIMNE.AnalisarArquivo;
 
  var
 
  lQtde, lCampos: integer;
 
  lArquivo, lLinhaDados: TStringList;
 
  sLinhaDados: string;
 
  begin
 
  If JvOpenDialog1.Execute then
 
  Begin
 
  lArquivo := TStringList.Create;
 
  try
 
  lArquivo.LoadFromFile(JvOpenDialog1.FileName);
 
  lCampos := 0;
 
  lLinhaDados := TStringList.Create;
 
  try
 
  lLinhaDados.Delimiter := ',';
 
  while lArquivo.Count  0 do
 
  begin
 
  sLinhaDados := lArquivo[0];
 
  lLinhaDados.DelimitedText := 

Re: [delphi-br] Importação ignora 1ª linha do arq uivo

2010-07-23 Por tôpico Dirlei Dionísio
Ler código dentro de email é terrível. Se vc colocar o código no Pastebin (
http://pastebin.com) vai nos ajudar a te ajudar.


--
Dirlei Dionísio
Novo artigo: // Não comente seu código
http://MaisQueBomCodigo.blogspot.com


Em 23 de julho de 2010 10:11, Ralp Alves Bezerra ral...@gmail.comescreveu:



 Nobres colegas,

 Recentemente tive um problema com a importação de um arquivo.

 Com a ajuda dos nobres colegas e o envio de um exemplo pelo Walter,
 consegui
 sanar o problema.

 A importação foi realizada. Porém, fazendo uma analise mais detalhada,
 notei
 que primeira linha do arquivo nunca é importada. Fica sempre faltando o
 primeiro registro do arquivo.

 Estou postando abaixo o código utilizado. Se alguns dos nobres colegas
 poder
 me ajudar fico grato.

 Abraço.

 unit ufAnaliseDados;

 interface

 uses

 Classes, Forms, DB, Controls, Grids, DBGrids, DBClient, DBXpress, FMTBcd,

 DBXAutoInc, Provider, SqlExpr, RXCtrls, RXDBCtrl, Buttons, ExtCtrls,

 XiPanel, Dialogs, JvDialogs, XiProgressBar;

 type

 TfrmSIMNE = class(TForm)

 XiPanel1: TXiPanel;

 btImportar: TSpeedButton;

 dbgDados: TDBGrid;

 DBGrid1: TDBGrid;

 srcDados: TDataSource;

 JvOpenDialog1: TJvOpenDialog;

 Barra: TXiProgressBar;

 procedure btImportarClick(Sender: TObject);

 private

 fDadosTratados: TStringList;

 fCdsDadosTratados: TClientDataSet;

 procedure PrepararDados;

 procedure AnalisarArquivo;

 procedure CriarDataSet;

 procedure LiberarDados;

 public

 constructor Create(AOwner: TComponent); override;

 destructor Destroy; override;

 end;

 var

 frmSIMNE: TfrmSIMNE;

 implementation

 uses SysUtils, uDM, uImportaProcesso;

 {$R *.dfm}

 { TfrmAnaliseDados }

 procedure TfrmSIMNE.CriarDataSet;

 var

 i: integer;

 lLinhaDados: TStringList;

 begin

 { Cria o ClientDataSet }

 fCdsDadosTratados := TClientDataSet.Create(Self);

 { Define os campos que o ClientDataSet terá }

 with fCdsDadosTratados.FieldDefs do

 for i := 1 to 16 do

 Add(Format('Campo%2.2d', [i]), ftString, 40);

 { Cria o ClientDataset com os campos definidos }

 fCdsDadosTratados.CreateDataSet;

 { Preenche o ClientDataSet com os dados tratados }

 lLinhaDados := TStringList.Create;

 try

 lLinhaDados.Delimiter := ',';

 lLinhaDados.QuoteChar := '';

 while fDadosTratados.Count  0 do

 begin

 fCdsDadosTratados.Append;

 lLinhaDados.DelimitedText := fDadosTratados[0];

 for i := 0 to 15 do

 fCdsDadosTratados.Fields[i].AsString := lLinhaDados[i];

 fDadosTratados.Delete(0);

 end;

 finally

 lLinhaDados.Free;

 end;

 { Vincula o ClientDataSet ao DataSource associado ao DBGrid }

 srcDados.DataSet := fCdsDadosTratados;

 end;

 procedure TfrmSIMNE.AnalisarArquivo;

 var

 lQtde, lCampos: integer;

 lArquivo, lLinhaDados: TStringList;

 sLinhaDados: string;

 begin

 If JvOpenDialog1.Execute then

 Begin

 lArquivo := TStringList.Create;

 try

 lArquivo.LoadFromFile(JvOpenDialog1.FileName);

 lCampos := 0;

 lLinhaDados := TStringList.Create;

 try

 lLinhaDados.Delimiter := ',';

 while lArquivo.Count  0 do

 begin

 sLinhaDados := lArquivo[0];

 lLinhaDados.DelimitedText := sLinhaDados;

 lLinhaDados.QuoteChar := '';

 lQtde := lLinhaDados.Count;

 if lCampos = 0 then

 lCampos := lQtde

 else if lQtde  lCampos then

 raise Exception.CreateFmt(

 'Quantidade de campos das linhas de dados é variável.' +

 sLineBreak + sLineBreak +

 sLinhaDados +

 sLineBreak + sLineBreak +

 '(%d  %d).', [lQtde, lCampos])

 else

 fDadosTratados.Add(sLinhaDados);

 lArquivo.Delete(0);

 end;

 finally

 lLinhaDados.Free;

 end;

 finally

 lArquivo.Free;

 end;

 end;

 end;

 constructor TfrmSIMNE.Create(AOwner: TComponent);

 begin

 inherited Create(AOwner);

 PrepararDados;

 AnalisarArquivo;

 CriarDataSet;

 end;

 destructor TfrmSIMNE.Destroy;

 begin

 LiberarDados;

 inherited Destroy;

 end;

 procedure TfrmSIMNE.LiberarDados;

 begin

 if Assigned(fDadosTratados) then

 fDadosTratados.Free;

 if Assigned(fCdsDadosTratados) then

 begin

 fCdsDadosTratados.Close;

 fCdsDadosTratados.Free;

 end;

 end;

 procedure TfrmSIMNE.PrepararDados;

 begin

 fDadosTratados := TStringList.Create

 end;

 procedure TfrmSIMNE.btImportarClick(Sender: TObject);

 begin

 DM.cds_SIM601.Open;

 Try

 DM.cds_SIM601.DisableControls;

 fCdsDadosTratados.First;

 fCdsDadosTratados.DisableControls;

 Barra.Position:=0;

 Barra.Max:=fCdsDadosTratados.RecordCount;

 while not fCdsDadosTratados.Eof do

 Begin

 DM.cds_SIM601.Insert;

 DM.cds_SIM601.fieldbyname('Numero_NE').AsString
 :=fCdsDadosTratados.Fields[6].AsString;

 DM.cds_SIM601.fieldbyname('NP_Numero_Sub_Empenho').AsString
 :=fCdsDadosTratados.Fields[7].AsString;

 DM.cds_SIM601.fieldbyname('NP_Numero_NP').AsString
 :=fCdsDadosTratados.Fields[8].AsString;

 DM.cds_SIM601.fieldbyname('NP_Data_Ref_Doc').AsString
 :=fCdsDadosTratados.Fields[9].AsString;

 DM.cds_SIM601.fieldbyname('NP_Num_Doc_Caixa').AsString
 :=fCdsDadosTratados.Fields[10].AsString;

 DM.cds_SIM601.fieldbyname('NP_Data_NP').AsString