Abrir toda a tabela do dbgrid
Galera, meu problema é o seguinte teho um dbgrid que puxa as informações de uma tabela no banco de dados.
Só que euando eu abro o dbgrid ele mosta as 50 primeiras linhas eu tenho um processo de exportar essa tabela para o excel, que lê todo meu DBgrid e joga para o Excel.
O problema é o seguinte quando abro o dbgrid e mando exportar minha tabela ele só exporta aqueles registros que estão na tela, eu queria da um jeito que ele carregasse toda minha tabela sem eu ter que ficar descendo minha barra para ir carregando . Teria um jeito de carregar toda a tabela pois tenho uma tabela de 27.000 linhas.
Espero que me ajudem.
Veleuu
Só que euando eu abro o dbgrid ele mosta as 50 primeiras linhas eu tenho um processo de exportar essa tabela para o excel, que lê todo meu DBgrid e joga para o Excel.
O problema é o seguinte quando abro o dbgrid e mando exportar minha tabela ele só exporta aqueles registros que estão na tela, eu queria da um jeito que ele carregasse toda minha tabela sem eu ter que ficar descendo minha barra para ir carregando . Teria um jeito de carregar toda a tabela pois tenho uma tabela de 27.000 linhas.
Espero que me ajudem.
Veleuu
Cleiflavio
Curtidas 0
Respostas
Prgdelphi
08/10/2008
vc ta usando o TDBGrid mesmo? Que vem com o Delphi? Ou é algum grid de terceiro?
Qual processo é esse de exportar para o excel? Ele deveria ler do dataset e não do DbGrid.
Qual processo é esse de exportar para o excel? Ele deveria ler do dataset e não do DbGrid.
GOSTEI 0
Cleiflavio
08/10/2008
Eu estou usando um Tdbgrid do proprio delphi.
e quando exporto eu uso o dataset mas ele faz um for nas linhas e vai rodando o dbgrid se vc não ir lá e clicar descer o dbgrid até o final ele não exporta a tabela todo somente exporta até onde vc desceu.
segue meu codigo para exportar
procedure TF_exportarProduto.FormActivate(Sender: TObject);
var linha, coluna : integer;
var planilha : variant;
var valorcampo : string;
begin
// F_exportar.ShowModal;
//DM.SQLQuery1.CachedUpdates := true;
planilha:= CreateoleObject(´Excel.Application´);
planilha.WorkBooks.add(1);
planilha.caption := ´Exportando dados para o Excel´;
planilha.visible := true;
DM.ClientDataSet_PRODUTO_visual.ApplyUpdates(1);
DM.ClientDataSet_PRODUTO_visual.First;
progressBar1.Max := DM.ClientDataSet_PRODUTO_visual.RecordCount;
progressBar1.Position := 0;
for linha := 0 to DM.ClientDataSet_PRODUTO_visual.RecordCount - 1 do
begin
for coluna := 1 to DM.ClientDataSet_PRODUTO_visual.FieldCount do
begin
valorcampo := DM.ClientDataSet_PRODUTO_visual.Fields[coluna - 1].AsString;
planilha.cells[linha + 2,coluna] := ´´´´ + valorCampo;
end;
DM.ClientDataSet_PRODUTO_visual.Next;
progressbar1.position:= progressbar1.position+1;
application.processmessages;
end;
for coluna := 1 to DM.ClientDataSet_PRODUTO_visual.FieldCount do
begin
valorcampo := DM.ClientDataSet_PRODUTO_visual.Fields[coluna - 1].DisplayLabel;
planilha.cells[1,coluna] := ´´´´ + valorcampo;
end;
planilha.columns.Autofit;
progressbar1.position:= 135 ;
//Showmessage(´Tabela Exportada com Sucesso !!!´);
if messagedlg(´Tabela Exportada com Sucesso !!!´, mtCustom, [mbOk],0) = mrOk
then begin
F_exportarProduto.Close;
end;
end;
e quando exporto eu uso o dataset mas ele faz um for nas linhas e vai rodando o dbgrid se vc não ir lá e clicar descer o dbgrid até o final ele não exporta a tabela todo somente exporta até onde vc desceu.
segue meu codigo para exportar
procedure TF_exportarProduto.FormActivate(Sender: TObject);
var linha, coluna : integer;
var planilha : variant;
var valorcampo : string;
begin
// F_exportar.ShowModal;
//DM.SQLQuery1.CachedUpdates := true;
planilha:= CreateoleObject(´Excel.Application´);
planilha.WorkBooks.add(1);
planilha.caption := ´Exportando dados para o Excel´;
planilha.visible := true;
DM.ClientDataSet_PRODUTO_visual.ApplyUpdates(1);
DM.ClientDataSet_PRODUTO_visual.First;
progressBar1.Max := DM.ClientDataSet_PRODUTO_visual.RecordCount;
progressBar1.Position := 0;
for linha := 0 to DM.ClientDataSet_PRODUTO_visual.RecordCount - 1 do
begin
for coluna := 1 to DM.ClientDataSet_PRODUTO_visual.FieldCount do
begin
valorcampo := DM.ClientDataSet_PRODUTO_visual.Fields[coluna - 1].AsString;
planilha.cells[linha + 2,coluna] := ´´´´ + valorCampo;
end;
DM.ClientDataSet_PRODUTO_visual.Next;
progressbar1.position:= progressbar1.position+1;
application.processmessages;
end;
for coluna := 1 to DM.ClientDataSet_PRODUTO_visual.FieldCount do
begin
valorcampo := DM.ClientDataSet_PRODUTO_visual.Fields[coluna - 1].DisplayLabel;
planilha.cells[1,coluna] := ´´´´ + valorcampo;
end;
planilha.columns.Autofit;
progressbar1.position:= 135 ;
//Showmessage(´Tabela Exportada com Sucesso !!!´);
if messagedlg(´Tabela Exportada com Sucesso !!!´, mtCustom, [mbOk],0) = mrOk
then begin
F_exportarProduto.Close;
end;
end;
GOSTEI 0
Eniorm
08/10/2008
uma forma simples de contornar isso é aplicar o procedimento FetchAll de sua query
Um caso interessante é, que supondo que na tela do grid só exiba estes 50 primeiros registros, a função RecordCount contará como se existisse somente 50 registros.
se você utiliza IBX/MDO, o objeto Query possui um procedimento chamado FetchAll que força a busca de todos os registros da tabela para a memória... mas caso o componente de acesso que você utiliza não possuir algo do tipo, isso também da certo:
abraços
Um caso interessante é, que supondo que na tela do grid só exiba estes 50 primeiros registros, a função RecordCount contará como se existisse somente 50 registros.
se você utiliza IBX/MDO, o objeto Query possui um procedimento chamado FetchAll que força a busca de todos os registros da tabela para a memória... mas caso o componente de acesso que você utiliza não possuir algo do tipo, isso também da certo:
Query.Last; Query.First;
abraços
GOSTEI 0
Cleiflavio
08/10/2008
Cara, deu certo ficou do jeito que eu queria , assim evito de ficar tendo que descer até o final do DBGrid.
Valeuuu mesmo m ajudou muito
Valeuuu mesmo m ajudou muito
GOSTEI 0
Marcosrocha
08/10/2008
O melhor seria usar IBQuery.FetchAll; ao invés do Last / First.
GOSTEI 0