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 [mailto:delphi...@yahoogrupos.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 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.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 := 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] > > >