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]