Fórum Progreessbar #424577

25/09/2012

0

tenho um sistema de cadastro

ADOConnection
adoquery
datasourse

BD: ACCESS

eu gostaria tambem de colocar um progressbar.visible, em enquanto tiver exportando os dados para o excel. Como eu faço?
Paulo

Paulo

Responder

Posts

25/09/2012

Joel Rodrigues

Não sei como vocÊ está fazendo essa exportação. Mas a ideia em geral é a seguinte:
progressBar.Max := dataSet.RecordCount;
dataSet.First;
while not dataSet.Eof do
begin
//exportar linha do dataSet
dataSet.Next;
progressBar.Postition := progressBar.Postition + 1;
end
Responder

Gostei + 0

25/09/2012

Paulo

Não sei como vocÊ está fazendo essa exportação. Mas a ideia em geral é a seguinte:
progressBar.Max := dataSet.RecordCount;
dataSet.First;
while not dataSet.Eof do
begin
//exportar linha do dataSet
dataSet.Next;
progressBar.Postition := progressBar.Postition + 1;
end



Não deu certo!
Responder

Gostei + 0

25/09/2012

Joel Rodrigues

O que eu passei é um modelo geral, você precisa adaptar para o seu caso. como você esta fazendo essa exportação?
Responder

Gostei + 0

26/09/2012

Alisson Santos

Posta para nós o codigo que está passando para podermos analisar
Responder

Gostei + 0

26/09/2012

Ricardo Araujo

pode ser assim, quase parecido com do nosso colega.


// aqui você pode pegar a quantidade de registro que será passado para o progressBar.
ProgressBar.Max := Query.RecordCount;

// agora apontando para o primeiro registro.
Query.First;

//nesta etapa, enquanto o registro não chegar ao final continua fazendo o loop.
// aqui você pode usar também um for para fazer isto, é tranquilo.
while not Query.Eof do
begin

// arqui você pode colocar a rotina de exportação para excell.

// passando para o próximo registro.
Queryt.Next;

progressBar.Postition := progressBar.Postition + 1;
end;

espero ter ajudado.

Responder

Gostei + 0

26/09/2012

Paulo

pode ser assim, quase parecido com do nosso colega.


// aqui você pode pegar a quantidade de registro que será passado para o progressBar.
ProgressBar.Max := Query.RecordCount;

// agora apontando para o primeiro registro.
Query.First;

//nesta etapa, enquanto o registro não chegar ao final continua fazendo o loop.
// aqui você pode usar também um for para fazer isto, é tranquilo.
while not Query.Eof do
begin

// arqui você pode colocar a rotina de exportação para excell.

// passando para o próximo registro.
Queryt.Next;

progressBar.Postition := progressBar.Postition + 1;
end;

espero ter ajudado.

tambem nao deu certo.

Os codigos da exportação que estou usando, são:

procedure TForm1.ExportarDados1Click(Sender: TObject);
Var
planilha : variant;
i, linha : Integer;
valorcampo : String;
begin
planilha := CreateoleObject('Excel.Application');
planilha.WorkBooks.Add(1);
planilha.caption := 'Exportando dados do CAD.SGT-PS.NET® para o Excel';
planilha.visible := True;
linha := -1;
if not ADOQuery1.IsEmpty then
for i := 0 to ADOQuery1.FieldCount - 1 do
begin
if ADOQuery1.Fields[i].FieldName <> 'Foto' then
planilha.cells[1,i+1] := ADOQuery1.Fields[i].FieldName;
end;
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
Inc(linha);
for i := 0 to ADOQuery1.FieldCount -1 do
begin
planilha.cells[linha + 2,i+1] := ADOQuery1.Fields[i].AsString;
end;
ADOQuery1.Next;
end;
planilha.columns.Autofit;


Responder

Gostei + 0

26/09/2012

Ricardo Araujo

pode ser assim, quase parecido com do nosso colega.


// aqui você pode pegar a quantidade de registro que será passado para o progressBar.
ProgressBar.Max := Query.RecordCount;

// agora apontando para o primeiro registro.
Query.First;

//nesta etapa, enquanto o registro não chegar ao final continua fazendo o loop.
// aqui você pode usar também um for para fazer isto, é tranquilo.
while not Query.Eof do
begin

// arqui você pode colocar a rotina de exportação para excell.

// passando para o próximo registro.
Queryt.Next;

progressBar.Postition := progressBar.Postition + 1;
end;

espero ter ajudado.

tambem nao deu certo.

Os codigos da exportação que estou usando, são:

procedure TForm1.ExportarDados1Click(Sender: TObject);
Var
planilha : variant;
i, linha : Integer;
valorcampo : String;
begin
planilha := CreateoleObject('Excel.Application');
planilha.WorkBooks.Add(1);
planilha.caption := 'Exportando dados do CAD.SGT-PS.NET® para o Excel';
planilha.visible := True;
linha := -1;
if not ADOQuery1.IsEmpty then
for i := 0 to ADOQuery1.FieldCount - 1 do
begin
if ADOQuery1.Fields[i].FieldName <> 'Foto' then
planilha.cells[1,i+1] := ADOQuery1.Fields[i].FieldName;
end;
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
Inc(linha);
for i := 0 to ADOQuery1.FieldCount -1 do
begin
planilha.cells[linha + 2,i+1] := ADOQuery1.Fields[i].AsString;
end;
ADOQuery1.Next;
end;
planilha.columns.Autofit;








colegar vou adicionar o código que uso em minha aplicação:
estou usando o componente gauge, como ele é mais fácil de fazer isto.


botão : Exportar

var
Pasta : Variant;
Linha : Integer;
lcCodProd : string;
begin

Linha := 2;
Pasta := CreateOleObject('Excel.Application'); // Criar uma aplicação excel
Pasta.WorkBooks.add(1); // adicionar uma pasta do Excel
Pasta.Caption := 'Programação PCP';
Pasta.Visible := true; // deixar a planilha envisível
Pasta.Cells[1, 1]:= 'Cód. Material';
Pasta.Cells[1, 2]:= 'Descrição';
Pasta.Cells[1, 3]:= 'Cliente';
Pasta.Cells[1, 4]:= 'Fabrica';
Pasta.Cells[1, 5]:= 'Est. Resil';
Pasta.Cells[1, 6]:= 'Qtd Prog. Venda';
Pasta.Cells[1, 7]:= 'Qtd a Produzir';
Pasta.Cells[1, 8]:= 'Qtd Informada';

Gauge1.Visible := true;
Gauge1.MaxValue := 0;
Gauge1.MaxValue := dmMS_SisPCP.Cds_PCP.RecordCount;

dmMS_SisPCP.Cds_PCP.First;
dmMS_SisPCP.Cds_PCP.DisableControls; // desabilitar os controles de dados
try
while not (dmMS_SisPCP.Cds_PCP.Eof) do
begin
Application.ProcessMessages;

Pasta.Cells[Linha, 1] := dmMS_SisPCP.Cds_PCP.FieldByName('cd_produto').AsString;
Pasta.Cells[Linha, 1].NumberFormat := '0000,00000';
Pasta.Cells[Linha, 2] := dmMS_SisPCP.Cds_PCP.FieldByName('descricao').AsString;
Pasta.Cells[Linha, 3] := dmMS_SisPCP.Cds_PCP.FieldByName('Cliente').AsString;
Pasta.Cells[Linha, 4] := dmMS_SisPCP.Cds_PCP.FieldByName('fabrica').AsString;
Pasta.Cells[Linha, 5] := dmMS_SisPCP.Cds_PCP.FieldByName('Quant_Estoque').AsString;
Pasta.Cells[Linha, 6] := dmMS_SisPCP.Cds_PCP.FieldByName('quantidade_programada').AsString;
Pasta.Cells[Linha, 7] := dmMS_SisPCP.Cds_PCP.FieldByName('Quant_A_Produzir').AsString;
Pasta.Cells[Linha, 8] := dmMS_SisPCP.Cds_PCP.FieldByName('Quant_a_Prod').AsString;

Linha := Linha + 1;
dmMS_SisPCP.Cds_PCP.Next;
Gauge1.Progress := Gauge1.Progress + 1;
Application.ProcessMessages;
end;
Gauge1.Visible := false;
Pasta.Columns.AutoFit; // faz
finally
dmMS_SisPCP.Cds_PCP.EnableControls; // sempre será executada esta linha
Pasta := Unassigned;
end;


Responder

Gostei + 0

26/09/2012

Leonardo Xavier

Coloque seu código dentro de um Ttimer, para não ter travamentos durante sua aplicação. Com opção Enable:=false (setado no componente) quando chamar a função de exportar coloque TtimerX.enable:=true; E no final do código de sua exportação coloque um TtimerX.enable:=false;
Responder

Gostei + 0

27/09/2012

Alisson Santos

O que não fez foi movimentar o statusbar apenas.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar