Re: [delphi-br] Importação ignora 1ª linha do arq uivo
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
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