Ir para conteúdo
Fórum Script Brasil
  • 0

[resolvido] Gauge


Eder

Pergunta

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

Editado por Micheus
Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...