RecordCount no StatusBar
Olá pessoal, tudo bem? Espero que sim.
No Software que to desenvolvendo, em todos forms de casdastro e visualização de registros eu coloco um StatusBar com o texto:
´Nº de Registros Listados: X´
e boto junto um RecordCount, pra listar todos registros da tabela e informar quantos registros tem.
Bom, mas nesse form que fiz agora, eu coloquei uma ´Pesquisa Rápida´. Como serão muitos registros, essa pesquisa serve pra achar um rapidamente pra ser usado.
Então fiz a mesma coisa, com o mesmo intuito de listar os dados exibidos. Cada vez que se pesquisa alguma coisa, ele atualiza o número de registros de acordo com a pesquisa, sempre mostrando quantos estao sendo listados e nao o total da tabela.
Mas agora me surgiu uma idéia que gostar de implementar. Gostaria de ter um texto assim no StatusBar:
´Nº de Registros Listados: X de Y´.
Ou seja, gostaria que ele continuasse me mostrando quantos registros tem ao total na tabela, no lugar do Y, e no lugar do X, quantos registros estao sendo mostrados no momento.
Mas se eu uso o RecordCount no ClientDataSet, ele vai me listar quantos ele pesquisou e não o total. Tem como eu listar desse jeito? Pegando o total da tabela e o total de registros mostrados?
Grato pela ajuda. :D
No Software que to desenvolvendo, em todos forms de casdastro e visualização de registros eu coloco um StatusBar com o texto:
´Nº de Registros Listados: X´
e boto junto um RecordCount, pra listar todos registros da tabela e informar quantos registros tem.
Bom, mas nesse form que fiz agora, eu coloquei uma ´Pesquisa Rápida´. Como serão muitos registros, essa pesquisa serve pra achar um rapidamente pra ser usado.
Então fiz a mesma coisa, com o mesmo intuito de listar os dados exibidos. Cada vez que se pesquisa alguma coisa, ele atualiza o número de registros de acordo com a pesquisa, sempre mostrando quantos estao sendo listados e nao o total da tabela.
Mas agora me surgiu uma idéia que gostar de implementar. Gostaria de ter um texto assim no StatusBar:
´Nº de Registros Listados: X de Y´.
Ou seja, gostaria que ele continuasse me mostrando quantos registros tem ao total na tabela, no lugar do Y, e no lugar do X, quantos registros estao sendo mostrados no momento.
Mas se eu uso o RecordCount no ClientDataSet, ele vai me listar quantos ele pesquisou e não o total. Tem como eu listar desse jeito? Pegando o total da tabela e o total de registros mostrados?
Grato pela ajuda. :D
Aersoftware
Curtidas 0
Respostas
Paullsoftware
21/07/2006
você pode ter um CDS auxiliar que efetua a pesquisa, e guardar em uma variavel o numero total de registros existentes na tabela tipo..
espero ter ajudado :wink:
var TR : Integer; begin with cdsAuxiliar do begin Close; CommandText := ´´; CommandText := ´Select Count(*) as TotalRegistros from Tabela´; Open; TR := FieldByName(´TotalRegistros´).AsInteger; Close; end; // e para pesquisar somente um exemplo: with cdsCadastro do begin Close; CommandText := ´´; CommandText := ´Select * from Tabela where Upper(Nome) like :pNome´; Params.ParamByName(´pNome´).AsString := Edit1.Text + ´¬´; Open; end; StatusBar.Panels[3].Text := ´Registros Encontrados: ´ + IntToStr(cdsCadastro.RecordCount) ´ + ´ de ´ + IntToStr(tr);
GOSTEI 0
Aersoftware
21/07/2006
Hmmm.. entendi.. eu nunca tinha pensando em usar um CDS auxiliar pra isso.. hehe.. pensei q pudesse ser feito com o mesmo. Mas é uma boa sugestão.. valeu..
GOSTEI 0
Paullsoftware
21/07/2006
Eu como uso FireBird normalmente faço isso com uma ´View´ chamo ela sempre que preciso, para ter que tá criando instruções aqui e ali, simplesmente chamo ela e pronto...
GOSTEI 0
Aersoftware
21/07/2006
Como assim uma View? Tb uso Firebird.
GOSTEI 0
Paullsoftware
21/07/2006
Como assim uma View? Tb uso Firebird.
Mais ou menos assim:
CREATE VIEW TITULOS(TOTAL) AS select COUNT(*) AS TOTAL from ACERVO where CODIGO>0;
isso no próprio banco, e para usar faço:
cdsTotalAcervo.Open; VarTotal := cdsTotalAcervo.FieldByName(Total).AsInteger; cdsTotalAcervo.Close; Label1.Caption := IntToStr(VarTotal);
deu pra entender? :lol:
GOSTEI 0
Aersoftware
21/07/2006
Mais ou menos.. hehe.. mas eu pensei numa coisa, se funcionar eu posto aqui.. valeu cara.. abraços..
GOSTEI 0
Aersoftware
21/07/2006
Olha, fiz uma gambiarra aqui e funcionou.. hehe.. só nao sei se vai perder performance, pra isso gostaria da ajuda de quem puder.
Criei uma variável universal do tipo inteiro e o seguinte procedimento pra jogar o número de registros dentro dela:
Aí, em todo código onde eu chamo a entrada pro StatusBar, eu coloquei, primeiro a chamada pra essa procedure, depois a pesquisa a ser feita e depois a entrada pro StatusBar, que ficou assim um exemplo:
Criei uma variável universal do tipo inteiro e o seguinte procedimento pra jogar o número de registros dentro dela:
procedure TFrmVerTitulosNacionais.TotalRegistros; begin DmDados.ClientTitulosNacionais.Close; With DmDados.SqlTitulosNacionais do begin close; CommandText := ´Select * From TB_TITULOS_NACIONAIS´; open; end; DmDados.ClientTitulosNacionais.Open; TotalRegistrosTabela := DmDados.ClientTitulosNacionais.RecordCount; end;
Aí, em todo código onde eu chamo a entrada pro StatusBar, eu coloquei, primeiro a chamada pra essa procedure, depois a pesquisa a ser feita e depois a entrada pro StatusBar, que ficou assim um exemplo:
procedure TFrmVerTitulosNacionais.EdtPesquisarTituloChange(Sender: TObject); begin if (EdtPesquisarTitulo.Text <> ´´) and (LkUpPesquisarEditoraOriginal.Text = ´´) and (LkUpPesquisarEditoraNacional.Text = ´´) then begin [b]TotalRegistros;[/b] DmDados.ClientTitulosNacionais.Close; With DmDados.SqlTitulosNacionais do begin close; CommandText := ´Select * From TB_TITULOS_NACIONAIS where upper(NOME_TITULO_NACIONAL) like ´ + AnsiUpperCase(QuotedStr(EdtPesquisarTitulo.Text+´¬´)) + ´Order by NOME_SERIE_TITULO_NACIONAL´; open; end; DmDados.ClientTitulosNacionais.Open; [b]StbTitulosNacionais.Panels[0].Text := ´Total de Títulos Nacionais: ´+ IntToStr(DmDados.ClientTitulosNacionais.RecordCount)+ ´ de ´+ IntToStr(TotalRegistrosTabela);[/b] end else if (EdtPesquisarTitulo.Text = ´´) and (LkUpPesquisarEditoraOriginal.Text = ´´) and (LkUpPesquisarEditoraNacional.Text = ´´) then begin [b]TotalRegistros;[/b] DmDados.ClientTitulosNacionais.Close; With DmDados.SqlTitulosNacionais do begin close; CommandText := ´Select * From TB_TITULOS_NACIONAIS where upper(NOME_TITULO_NACIONAL) like ´ + AnsiUpperCase(QuotedStr(EdtPesquisarTitulo.Text+´¬´)) + ´Order by NOME_SERIE_TITULO_NACIONAL´; open; end; DmDados.ClientTitulosNacionais.Open; StbTitulosNacionais.Panels[0].Text := ´Total de Títulos Nacionais: ´+ IntToStr(DmDados.ClientTitulosNacionais.RecordCount)+ ´ de ´+ IntToStr(TotalRegistrosTabela); end;
GOSTEI 0
Aersoftware
21/07/2006
Olha, fiz uma gambiarra aqui e funcionou.. hehe.. só nao sei se vai perder performance, pra isso gostaria da ajuda de quem puder.
Criei uma variável universal do tipo inteiro e o seguinte procedimento pra jogar o número de registros dentro dela:
Aí, em todo código onde eu chamo a entrada pro StatusBar, eu coloquei, primeiro a chamada pra essa procedure, depois a pesquisa a ser feita e depois a entrada pro StatusBar, que ficou assim um exemplo:
Como eu disse, funcionou perfeitamente. Mas teste só com 57 registros. Acredito que esta tabela não terá muuuitos registros.. talvez de 500 a 1.000. Isso q eu fiz traria uma perda de performance nessa pesquisa?
Criei uma variável universal do tipo inteiro e o seguinte procedimento pra jogar o número de registros dentro dela:
procedure TFrmVerTitulosNacionais.TotalRegistros;
begin
DmDados.ClientTitulosNacionais.Close;
With DmDados.SqlTitulosNacionais do
begin
close;
CommandText :=
´Select * From TB_TITULOS_NACIONAIS´;
open;
end;
DmDados.ClientTitulosNacionais.Open;
TotalRegistrosTabela := DmDados.ClientTitulosNacionais.RecordCount;
end;
Aí, em todo código onde eu chamo a entrada pro StatusBar, eu coloquei, primeiro a chamada pra essa procedure, depois a pesquisa a ser feita e depois a entrada pro StatusBar, que ficou assim um exemplo:
procedure TFrmVerTitulosNacionais.EdtPesquisarTituloChange(Sender: TObject);
begin
if (EdtPesquisarTitulo.Text <> ´´) and (LkUpPesquisarEditoraOriginal.Text = ´´) and (LkUpPesquisarEditoraNacional.Text = ´´) then
begin
[b:9ceeba2103]TotalRegistros;[/b:9ceeba2103]
DmDados.ClientTitulosNacionais.Close;
With DmDados.SqlTitulosNacionais do
begin
close;
CommandText :=
´Select * From TB_TITULOS_NACIONAIS where upper(NOME_TITULO_NACIONAL) like ´
+ AnsiUpperCase(QuotedStr(EdtPesquisarTitulo.Text+´¬´))
+ ´Order by NOME_SERIE_TITULO_NACIONAL´;
open;
end;
DmDados.ClientTitulosNacionais.Open;
[b:9ceeba2103]StbTitulosNacionais.Panels[0].Text := ´Total de Títulos Nacionais: ´+ IntToStr(DmDados.ClientTitulosNacionais.RecordCount)+ ´ de ´+ IntToStr(TotalRegistrosTabela);[/b:9ceeba2103]
end
else if (EdtPesquisarTitulo.Text = ´´) and (LkUpPesquisarEditoraOriginal.Text = ´´) and (LkUpPesquisarEditoraNacional.Text = ´´) then
begin
[b:9ceeba2103]TotalRegistros;[/b:9ceeba2103]
DmDados.ClientTitulosNacionais.Close;
With DmDados.SqlTitulosNacionais do
begin
close;
CommandText :=
´Select * From TB_TITULOS_NACIONAIS where upper(NOME_TITULO_NACIONAL) like ´
+ AnsiUpperCase(QuotedStr(EdtPesquisarTitulo.Text+´¬´))
+ ´Order by NOME_SERIE_TITULO_NACIONAL´;
open;
end;
DmDados.ClientTitulosNacionais.Open;
[b:9ceeba2103]StbTitulosNacionais.Panels[0].Text := ´Total de Títulos Nacionais: ´+ IntToStr(DmDados.ClientTitulosNacionais.RecordCount)+ ´ de ´+ IntToStr(TotalRegistrosTabela);[/b:9ceeba2103]
end;
Como eu disse, funcionou perfeitamente. Mas teste só com 57 registros. Acredito que esta tabela não terá muuuitos registros.. talvez de 500 a 1.000. Isso q eu fiz traria uma perda de performance nessa pesquisa?
GOSTEI 0
Paullsoftware
21/07/2006
Crie essa procedure:
modo de usar...
espero ter ajudado... :wink:
Function TotalRegistro(aCDS:TClientDataSet;aTabela:String):Integer; begin result := 0; with aCds do begin close; commandText := ´´; commandText := ´Select Count(*) as Total from ´+UpperCase(Tabela); open; end; result := aCds.FieldByName(´Total´).AsInteger; end;
modo de usar...
StatusBar.Panels[0].Text := ´Total de Registros: ´+ IntToStr(TotalRegistro(ClientDataSet1,´Clientes´));
espero ter ajudado... :wink:
GOSTEI 0