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