Na parte:

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);

     como sao os itens do ClientDataSet, entao, faca:

for i := 0 to Count(fCdsDadosTratados.FieldDefs)-1 do

e por ai vai.



***********************************
*** Cláudio Duarte S. de Moraes ***
******   Gerente de T. I.   *******
***      Magazine Sapatos       ***
******    (82) 2121-0323    *******
******    (82) 9101-7609    *******
****** skype: claudio.dsm    ******
***********************************


--- Em sex, 23/7/10, Ralp Alves Bezerra <ral...@gmail.com> escreveu:

> De: Ralp Alves Bezerra <ral...@gmail.com>
> Assunto: [delphi-br] Importação ignora 1ª linha do arquivo
> Para: delphi-br@yahoogrupos.com.br
> Data: Sexta-feira, 23 de Julho de 2010, 10:11
> 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
> :=fCdsDadosTratados.Fields[11].AsString;
> 
>        
> DM.cds_SIM601.fieldbyname('NP_Valor_NP').Value
> :=StrToFloat(StringReplace(fCdsDadosTratados.Fields[12].AsString,
> '.', ',',
> []));
> 
>  
> DM.cds_SIM601.fieldbyname('NP_Num_CPF_Responsavel').AsString:=fCdsDadosTrata
> dos.Fields[14].AsString;
> 
>        
> DM.cds_SIM601.fieldbyname('NP_Nome_Resp_Pag').AsString
> :=fCdsDadosTratados.Fields[15].AsString;
> 
>         DM.cds_SIM601.Post;
> 
>         DM.cds_SIM601.ApplyUpdates(0);
> 
>        
> Barra.Position:=Barra.Position+1;
> 
>         fCdsDadosTratados.Next;
> 
>     end;
> 
>   finally
> 
>     DM.cds_SIM601.EnableControls;
> 
>     fCdsDadosTratados.EnableControls;
> 
>     Barra.Position:=0;
> 
>     frmImportaProc.lblArquivo.Caption:='Último
> Arquivo Importado: SIM 604';
> 
>     Close;
> 
>   end;
> 
> end;
> 
> end.
> 
>  
> 
>  
> 
> 
> 
> [As partes desta mensagem que não continham texto foram
> removidas]
> 
> 
> 
> ------------------------------------
> 
> -- 
> <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER
> ESTA MENSAGEM >>>>>
> 
> Links do Yahoo! Grupos
> 
> 
> 
> 


      

Responder a