Fórum Abrir toda a tabela do dbgrid #364774

08/10/2008

0

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


Cleiflavio

Cleiflavio

Responder

Posts

08/10/2008

Prgdelphi

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.


Responder

Gostei + 0

08/10/2008

Cleiflavio

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;


Responder

Gostei + 0

08/10/2008

Eniorm

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:

Query.Last;
Query.First;


abraços


Responder

Gostei + 0

08/10/2008

Cleiflavio

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


Responder

Gostei + 0

08/10/2008

Marcosrocha

O melhor seria usar IBQuery.FetchAll; ao invés do Last / First.


Responder

Gostei + 0

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

Aceitar