Jump to content
Fórum Script Brasil
  • 0

[resolvido] Gauge


Eder
 Share

Question

Ola..pessoal

Eu tenho este galge programado neste codigo..porem ele não me da o resultado esperado real..ou seja, neste codigo eu tou lendo um arquivo *.csv e convertendo ele pra paradox...porem o gauge não ta correto..pois ele esta colocado da maneira que me da o resultado por registro...e eu gostaria que ele me retornasse o resultado por conversão geral, ou seja eu quero converter o csv pra db e gostaria que o Gauge mostrasse o real progresso da conversão....pois as vezes a conversão demora uns 5 minutos e é bom mostrar pro usuario o REAL.

Por favor Veja o codigo abaixo:

procedure TForm1.XiButton1Click(Sender: TObject);
Var
Txt: TextFile;
Entrada: String;
Linhas: Integer;
now_temp: TDateTime;//variavel contadora de tempo
begin
  //CONTADOR DE TEMPO
  now_temp:=now;//recebe tempo
  tempo.caption:= '00:00:00';
  //
  gauge1.Progress:=30;
  TABLE1.Active:=TRUE;
  Assignfile(Txt,'c:\xxxxx\yyyy.csv');//caminho do arquivo CSV
  Reset(Txt);
  Linhas := 0;
  While not Eoln(Txt) do
  begin
    gauge1.Progress:=50;
    Readln(Txt,Entrada);
    Inc(Linhas);
    If Linhas > 3 then//aqui verifica e desconcidera AS 4 primeiras linhas do CSV
       if (Copy(Entrada, 1, 1) = '3') then //AQUI CONSIDERA SOMENTE AS LINHAS QUE TEM O CAMPO 1 = 3
    begin
      gauge1.Progress:=80;
      Table1.Insert; //Abaixo converte pra *.DB
      //
      Table1.FieldByName('1').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('sigla_ctrc').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('numero_ctrc').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('ctrc/subcontr').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('situacao_ctrc').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('entr_cep').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('entr_cidade').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('entr_uf').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('tabela_calculo').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('desc_tabela').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('frete_peso').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('cod_vendedor').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      //
      {====ESTE CODIGO ABAIXO.....ALEM DE PROCESSAR
      COMO OS DEMAIS ACIMA...ELE EVITA DE CAIR NO BANCO DE DADOS O PONTO E VIRGULA...POR ISTO
      TERMINO A LEITURA COM ESTA LINHA ABAIXO.===}
      Table1.FieldByName('nome_vendedor').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      {===abaixo fecha o ultimo campo a ser convertido, EXCETO NOS CASOS
      Table1.FieldByName('contador').Value := 1;
      //
      Table1.Post;
      gauge1.Progress:=95;
    end;
  end;
  gauge1.Progress:=96;
  CloseFile(Txt);
  //aqui abaixo conta os registros
   gauge1.Progress:=97;
   while not TABLE1.Eof do begin
   Table1.Next;
   gauge1.Progress:=98;
   end;
   Label2.Caption := IntToStr(Table1.RecordCount);
   Table1.First;
   Beep;
   gauge1.Progress:=100;
   Tempo.caption:=(FormatDateTime('hh:mm:ss',now-now_temp));//conta o tempo de conversão
   Showmessage('Ok..Arquivo C:\xxxxx\yyyy.db criado com Sucesso E Já Processou o campo CONTADOR!');
   end;

Note que o Gauge esta sendo processado a cada registro convertido, acho que é isto que não pode acontecer....

Neste caso, qual seria a idéia pra fazer rodar o progresso Real?

muito Grato

Edited by Micheus
Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 0
Guest --felipe --

bom uma sugestão é você fazer um esquema para contar os registros antes de converte-los

então divida 100 pelo numero de registros

e a cada registro adicionado adicione ao gauge o valor resultante, que no final da converção será 100% com certeza

bom eu não sei se o Gauge aceita valores Float

se não aceitar, use uma variavel para ir acompanhando o progresso, e uma função para arredondar essa mesma variavel e aplicar no gauge

não sei se me expressei direito, qualquer coisa posta ai

abraço

Link to comment
Share on other sites

  • 0
Guest --Jonas --

Ai vai seu codigo com as modificações para usar o gauge:

Function quantaslin ( nomeDoArquivo: String ):integer;
var arq: TextFile;nr:integer;
linha: String;
begin
nr:=0;
AssignFile ( arq, nomeDoArquivo );
Reset ( arq );
ReadLn ( arq, linha );
while not Eof ( arq ) do
begin
ReadLn ( arq, linha );
nr:=nr+1;
end;
CloseFile ( arq );
quantaslin:=nr;
end;
procedure TForm1.XiButton1Click(Sender: TObject);
Var
   Txt: TextFile; 
   Entrada: String;
   Linhas: Integer;
   cont : integer;
   now_temp: TDateTime;//variavel contadora de tempo
begin
  //CONTADOR DE TEMPO
  now_temp:=now;//recebe tempo
  tempo.caption:= '00:00:00';
  //
  gauge1.Progress:=0;
  cont := 0;
  TABLE1.Active:=TRUE;

  Gauge1.MaxValue:=quantaslin('c:\sswrel\ctrc.csv');//valor max do gauge em função do nuero de linhas do arquivo

  Assignfile(Txt,'c:\sswrel\ctrc.csv');//caminho do arquivo CSV
  Reset(Txt);
  Linhas := 0;
  While not Eoln(Txt) do
  begin
    cont := cont + 1;
    gauge1.Progress:=cont;
    Readln(Txt,Entrada);
    Inc(Linhas);
    If Linhas > 3 then//aqui verifica e desconcidera AS 4 primeiras linhas do CSV
       if (Copy(Entrada, 1, 1) = '3') then //AQUI CONSIDERA SOMENTE AS LINHAS QUE TEM O CAMPO 1 = 3
    begin
      Table1.Insert; //Abaixo converte pra *.DB
      //
      Table1.FieldByName('1').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('sigla_ctrc').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('numero_ctrc').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('ctrc/subcontr').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('situacao_ctrc').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('entr_cep').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('entr_cidade').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('entr_uf').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('tabela_calculo').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('desc_tabela').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('frete_peso').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('cod_vendedor').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      //
      {====ESTE CODIGO ABAIXO.....ALEM DE PROCESSAR
      COMO OS DEMAIS ACIMA...ELE EVITA DE CAIR NO BANCO DE DADOS O PONTO E VIRGULA...POR ISTO
      TERMINO A LEITURA COM ESTA LINHA ABAIXO.===}
      Table1.FieldByName('nome_vendedor').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      {===abaixo fecha o ultimo campo a ser convertido, EXCETO NOS CASOS
      Table1.FieldByName('contador').Value := 1;
      //
      Table1.Post;
    end;
  end;

  CloseFile(Txt);

  //aqui abaixo conta os registros
   gauge1.Progress:=0;
   cont := 0;
   while not TABLE1.Eof do begin
   Table1.Next;
   cont := cont + 1; 
   gauge1.Progress:=cont;
   end;
   Label2.Caption := IntToStr(Table1.RecordCount);
   Table1.First;
   Beep;
   
   Tempo.caption:=(FormatDateTime('hh:mm:ss',now-now_temp));//conta o tempo de conversão
   Showmessage('Ok..Arquivo C:\xxxxx\yyyy.db criado com Sucesso E Já Processou o campo CONTADOR!');
   end;

Link to comment
Share on other sites

  • 0
...porem o gauge não ta correto..pois ele esta colocado da maneira que me da o resultado por registro...e eu gostaria que ele me retornasse o resultado por conversão geral, ou seja eu quero converter o csv pra db e gostaria que o Gauge mostrasse o real progresso da conversão....pois as vezes a conversão demora uns 5 minutos e é bom mostrar pro usuario o REAL.
Eder, se há demora desta grandeza, não acho interessante a leitura do arquivo por duas vezes (1 para estabelecer tamanho e outra para importação). Sabendo-se que trata-se de um arquivo texto, é possível estimar o tamanho do mesmo (valor muito próximo mesmo) e com esta informação calcular o avanço na leitura.

Para o gauge mostrar a duração do processo todo, e não apenas o referente a leitura do arquivo (baseada em seu tamanho), a idéia é trabalhar com um valor máximo do gauge que corresponda a 100(% do arquivo) + "n" processos a serem incrementados fora do loop - como os que você faz.

Eu inclui as alterações no seu código (marcadas com "//***") para que sirva de exemplo a outras situações parecidas (apenas suprimi a parte interna do loop) :

procedure TForm1.XiButton1Click(Sender: TObject);
Var
  ArqLido,  // *** Quantidade de caracteres lidos
  ArqSize :Integer;  // *** Tamanho do arquivo 
  Txt: TextFile;
  Entrada: String;
  Linhas: Integer;
  now_temp: TDateTime;//variavel contadora de tempo
begin
  //CONTADOR DE TEMPO
  now_temp:=now;//recebe tempo
  tempo.caption:= '00:00:00';
  //
  // gauge1.Progress:=30;  // *** sugiro retirar esta linha - não a computei
  TABLE1.Active:=TRUE;
  Assignfile(Txt,'c:\sswrel\ctrc.csv');//caminho do arquivo CSV
  Reset(Txt);
  ArqLido := 0;
  ArqSize := FileSize(Txt) *128;  // *** FileSize assume blocos de 128 quando não é arquivo "tipado"
  gauge1.MaxValue := 104;  // *** equivale a 100 +4 valores que você incrementa na mão
  Linhas := 0;
  While not Eoln(Txt) do
  begin
    // gauge1.Progress:=50;  // *** esta linha deve ser retirada - inclui outra abaixo
    Readln(Txt,Entrada);
    ArqLido := ArqLido +Length(Entrada)+2;  //*** este 2 = CR+LN (presumido)
    Gauge1.Progress := Trunc(ArqLido/ArqSize *100);  // *** progress chegará no máximo a 100 (%)
    Inc(Linhas);
    If Linhas > 3 then//aqui verifica e desconcidera AS 4 primeiras linhas do CSV
       if (Copy(Entrada, 1, 1) = '3') then //AQUI CONSIDERA SOMENTE AS LINHAS QUE TEM O CAMPO 1 = 3
    begin
      :  // ** parte suprimida
      :
      Table1.Post;
      // gauge1.Progress:=95;  //*** esta linha deve ser retirada
    end;
  end;
 //*** neste ponto, progress deveria estar com 100 (todo o arquivo lido)
  gauge1.Progress:=101;
  CloseFile(Txt);
  //aqui abaixo conta os registros
   gauge1.Progress:=102;
  //*** este loop abaixo, parece não fazer sentido...
  //*** de qualquer modo, como Progress recebe valor fixo, deixe-o fora do loop
   while not TABLE1.Eof do begin
     Table1.Next;
   end;
   gauge1.Progress:=103;  //*** retirado de dentro do loop
   Label2.Caption := IntToStr(Table1.RecordCount);
   Table1.First;
   Beep;
   gauge1.Progress:=104;  //*** 104 foi o valor definido como máximo - resulta em 100%
   Tempo.caption:=(FormatDateTime('hh:mm:ss',now-now_temp));//conta o tempo de conversão
   Showmessage('Ok..Arquivo C:\xxxxx\yyyy.db criado com Sucesso E Já Processou o campo CONTADOR!');
   end;

Veja se ficou funcionndo adequadamente.

Link to comment
Share on other sites

  • 0

Pessoal..desculpe a demora em responder...muito Obrigado a todos em ajudar.

Bom....quando o código do Jonas.....testei ele, e achei um probleminha, ele mostra a barrinha de progresso aparentemente certinha mas ela fica meio que mostrando o real mas em virtude do percentual que conta fica mostrando 4% ela fica parada também, alias ele até fica piscando(la no fundo ele conta) mas como é muito rapido...ele mostra pro usuario 4% e no fundo do Gauge fica um azulzinho correndo..e mostrando o real progresso...

Acredito que haja um buguezinho no contador....

quando a idéia do Micheus ...testei também e o programa não compilou nesta linha:

ArqSize := FileSize(Arq) *128;  // *** FileSize assume blocos de 128 quando não é arquivo "tipado"
tentei mudar assim..acho que você esqueceu:
ArqSize := FileSize(ArqLido) *128;  // *** FileSize assume blocos de 128 quando não é arquivo "tipado"
mas deu erro: [Error] CSV_DB.pas(260): Incompatible types Nesta linha também tem errinho:
ArqLido := ArqLido +Length(Linha)+2;  //*** este 2 = CR+LN (presumido)

tentei trocar linha por linhas..mas o erro persiste.

Valeu..Pessoal...Grato :)

Link to comment
Share on other sites

  • 0
quando a idéia do Micheus ...testei também e o programa não compilou nesta linha:

ArqSize := FileSize(Arq) *128;  // *** FileSize assume blocos de 128 quando não é arquivo "tipado"
foi mal... onde aparece Arq, você tem que utilizar a sua variavel arquivo, no caso, Txt - troque onde aparecer.
ArqSize := FileSize(Txt) *128;  // *** FileSize assume blocos de 128 quando não é arquivo "tipado"
Nesta linha também tem errinho:
ArqLido := ArqLido +Length(Linha)+2;  //*** este 2 = CR+LN (presumido)

tentei trocar linha por linhas..mas o erro persiste.

foi mal duas vezes... :rolleyes:

Onde coloquei Linha, deve ser utilizada a sua variável Entrada para a qual você lê a linha do arquivo.

É que puxei de uma rotina que eu tinha e não ajustei ao nome das suas variáveis.

Link to comment
Share on other sites

  • 0

Micheus.....testei o seu exemplo e algo não ta dando certo e não to conseguindo consertar.

Tipo.....no seu exemplo quando rodo o codigo...o gause fica processando paradão no 76%(independente do tamanho do arquivo) e a barra também fica ali no 76%...mas se eu espero um pouco depende o tamanho do arquivo....logo em seguida começa aparece uma barrinha na fundo dando o real progresso..e ai ela mal chega ao final tipo uns 93% e já encerra.

já o codigo do Jonas....faz semelhante...só que ele dependendo do tamanho do arquivo, as vezes fica paradão no 4% e ai também logo em seguida aparece uma barrinha la no fundo mostrando o progresso....e acaba certtinho.

Pergunta: É correto assim como esta mostrando?? porque o (%)pecentual que mostra não é real!!

Poderias dar um explicada mais detalhada do processo??

Eu achei que ele mostraria o processo real de conversão o percentual acompanhando a barra do processo.

muito Grato.

Link to comment
Share on other sites

  • 0
Tipo.....no seu exemplo quando rodo o codigo...o gause fica processando paradão no 76%(independente do tamanho do arquivo) e a barra também fica ali no 76%
tá parecendo que você já começa com algum valor em progress.

acho que uma coisa que você ainda precisa fazer é, após a linha Table1.Next (dentro do loop), adicionar a linha Application.ProcessMessages. Quando você faz um loop desta grandeza, o sistema praticamente para de processar mensagens, como WM_PAINT que resultará na repintura dos componentes, neste caso, prejudicando a atualização visual da barrinha do Gauge.

De qualquer modo, talvez fosse conveniente você colocar o seu código atualizado para uma avaliação.

Dê uma olhada neste (download) exemplo para ver se você compreende o que digo.

Link to comment
Share on other sites

  • 0
tá parecendo que você já começa com algum valor em progress.

acho que uma coisa que você ainda precisa fazer é, após a linha Table1.Next (dentro do loop), adicionar a linha Application.ProcessMessages. Quando você faz um loop desta grandeza, o sistema praticamente para de processar mensagens, como WM_PAINT que resultará na repintura dos componentes, neste caso, prejudicando a atualização visual da barrinha do Gauge.

R. coloquei o codigo Application.ProcessMessages. como você pediu mas nada mudou...a visualização ainda é o mesma.

Dê uma olhada no exemplo anexo para ver se você compreende o que digo.

R. Não consigui abrir o que você mandou dentro do zip. :(

De qualquer modo, talvez fosse conveniente você colocar o seu código atualizado para uma avaliação.

R. Segue abaixo ele completo......é um monte de dados...hoje esta tabela gira em torno de 60.000 registros e esta com uns 90 mb´s...é bem grandinho...mas se bem que tentei converter com menos dados e acontece o mesmo. :(

O mesmo caso acontece com o codigo do JONAS(a que me refiro).

procedure TForm1.XiButton1Click(Sender: TObject);
Var
ArqLido,             //mi
ArqSize : Integer; //mi
Txt: TextFile;
Entrada: String;
Linhas: Integer;
now_temp: TDateTime;//variavel contadora de tempo
begin
  //CONTADOR DE TEMPO
  now_temp:=now;//recebe tempo
  tempo.caption:= '00:00:00';
  //
  TABLE1.Active:=TRUE;
  //
  Assignfile(Txt,'c:\xxxxx\ctrc.csv');//caminho do arquivo CSV
  Reset(Txt);
  //michael abaixo
  ArqLido := 0;
  ArqSize := FileSize(txt) *128;  // *** FileSize assume blocos de 128 quando não é arquivo "tipado"
  gauge1.MaxValue := 104;  // *** equivale a 100 +4 valores que você incrementa na mão
  //ate aqui
  Linhas := 0;
  While not Eoln(Txt) do
  begin
    Readln(Txt,Entrada);
    //miachael abaixo
    ArqLido := ArqLido +Length(Entrada)+2;  //*** este 2 = CR+LN (presumido)
    Gauge1.Progress := Trunc(ArqLido/ArqSize *100);  // *** progress chegará no máximo a 100 (%)
    //
    Inc(Linhas);
    If Linhas > 3 then//aqui verifica e desconcidera AS 4 primeiras linhas do CSV
       if (Copy(Entrada, 1, 1) = '3') then //AQUI CONSIDERA SOMENTE AS LINHAS QUE TEM O CAMPO 1 = 3
    begin
      gauge1.Progress:=80;
      Table1.Insert;//Abaixo converte pra *.DB..lembrando que antes deve criar o DB no DataBase Desktop.
      Table1.FieldByName('1').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('sigla_ctrc').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('numero_ctrc').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('ctrc/subcontr').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('situacao_ctrc').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('data_emissao').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('hora_emissao').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('prev_ent').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('fil_dest').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('praca_destino').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('cidade_destino').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('uf_destino').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('qtde_volume').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('tipo_mercadoria').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('veiculo_coleta').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('veiculo_entrega').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('cubagem_m3').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('kg_real').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('kg_calculo').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('valor_n_fiscal').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('tipo_frete').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('sit_liquidacao').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('numero_controle').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('usu_inc').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('remetente_nome').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('remetente_cnpj').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('remetente_inscr').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('remet_endereco').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('remet_cep').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('remet_cidade').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('remet_uf').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('destinatario_nome').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('dest_cnpj').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('dest_inscr').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('dest_endereco').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('dest_cep').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('dest_cidade').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('dest_uf').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('pagador_nome').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('pag_cnpj').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('observ1').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('observ2').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('entrega/redesp_nome').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('entr_endereco').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('entr_cep').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('entr_cidade').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('entr_uf').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('ult_ocorr_local').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('ult_ocorr_data').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('Ult_ocorr_hora').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('ult_ocorr_codigo').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('ult_ocorr_descricao').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('ult_instr').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('tabela_calculo').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('desc_tabela').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('frete_peso').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('frete_valor').Value := Copy(Entrada,1,Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('aliquota').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('vlr_icms').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('despacho').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('cat').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('itr').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('gris').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('coleta').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('entrega').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('pedagio').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('outros_impostos').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('desconto').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('valor_frete').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('cfop').Value := Copy(Entrada,1, Pos(PathSep,Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('tipo_cobranca').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('valor_liquido').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('vlr_liquidado').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('data_liquidacao').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('rel_comissao_exp').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('rel_comissao rec').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('rel_comissao_vend').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('pacote').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('sgl_unid_emit').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('nro_manifesto').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('cod_vendedor').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));

      {por enquanto não aplicar
     Table1.FieldByName('serie_nf').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('nota_fiscal').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      Table1.FieldByName('data_emissao').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));    }

      {====ESTE CODIGO ABAIXO.....ALEM DE PROCESSAR
      COMO OS DEMAIS ACIMA...ELE EVITA DE CAIR NO BANCO DE DADOS O PONTO E VIRGULA...POR ISTO
      TERMINO A LEITURA COM ESTA LINHA ABAIXO.===}
      Table1.FieldByName('nome_vendedor').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);
      Delete(Entrada, 1, Pos(PathSep, Entrada));
      {===abaixo fecha o ultimo campo a ser convertido, EXCETO NOS CASOS
      ACIMA QUE TEM PONTO E VIRGULA...===}
      //Table1.FieldByName('nome_vendedor').Value := Copy(Entrada,1,
      //Length(Entrada));
      //
      Table1.FieldByName('contador').Value := 1;
      //
      Table1.Post;
    end;
  end;
  //*** neste ponto, progress deveria estar com 100 (todo o arquivo lido)
  gauge1.Progress:=101;   //michael

  CloseFile(Txt);
  //michael abaixo
  //aqui abaixo conta os registros
   gauge1.Progress:=102;
  //*** este loop abaixo, parece não fazer sentido...
  //*** de qualquer modo, como Progress recebe valor fixo, deixe-o fora do loop
   //ate aqui
   while not TABLE1.Eof do begin
   Table1.Next;
   Application.ProcessMessages; //*** Micheus
    end;
    gauge1.Progress:=103;  //*** retirado de dentro do loop
   Label2.Caption := IntToStr(Table1.RecordCount);
   Table1.First;
   Beep;
      gauge1.Progress:=104;  //*** 104 foi o valor definido como máximo - resulta em 100%
   Tempo.caption:=(FormatDateTime('hh:mm:ss',now-now_temp));//conta o tempo de conversão
   Showmessage('Ok..Arquivo C:\xxxxx\CTRC.DB criado com Sucesso E Já Processou o campo CONTADOR!');
   end;

Como você viu é bem grandinho .....hehehe.

Mas é isto ai...valeu a ajuda..t+

:D ;)

Link to comment
Share on other sites

  • 0
tá parecendo que você já começa com algum valor em progress.
dá só uma olhada nesta parte do código dentro do loop:

If Linhas > 3 then//aqui verifica e desconcidera AS 4 primeiras linhas do CSV
       if (Copy(Entrada, 1, 1) = '3') then //AQUI CONSIDERA SOMENTE AS LINHAS QUE TEM O CAMPO 1 = 3
    begin
      gauge1.Progress:=80;
      Table1.Insert;//Abaixo converte pra *.DB..lembrando que antes deve criar o DB no DataBase

Você tá definindo fixo: gauge1.Progress:=80;

daí não vai dar mesmo :blink:

Dê uma olhada no exemplo anexo para ver se você compreende o que digo.

R. Não consigui abrir o que você mandou dentro do zip. :(

volta lá no outro post e tenta baixar do link que coloquei.

Link to comment
Share on other sites

  • 0
Você tá definindo fixo: gauge1.Progress:=80;

daí não vai dar mesmo

R. Cara...foi mal......passei varias vezes em cima do problema e não via...da o desconto que o código é um pouquinho grande...rs.

Agora deu certo..alias por este erro e por mais um errinho o codigo do Jonas também funcionou certinho.

volta lá no outro post e tenta baixar do link que coloquei.

R. Ok..consegui baixar....e montei o aplicativo..já que meu delphi é 4 e não abre o aplicativo seu..amanhã vou dar uma estudada nele.....

De mais...muito grato pela/paciência novamente...

Obrigado também ao Jonas.

t+

:D

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...