Fórum RecordCount no StatusBar #325748
21/07/2006
0
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
Curtir tópico
+ 0Posts
21/07/2006
Paullsoftware
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
21/07/2006
Aersoftware
Gostei + 0
21/07/2006
Paullsoftware
Gostei + 0
21/07/2006
Aersoftware
Gostei + 0
21/07/2006
Paullsoftware
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
21/07/2006
Aersoftware
Gostei + 0
21/07/2006
Aersoftware
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
21/07/2006
Aersoftware
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?
Gostei + 0
22/07/2006
Paullsoftware
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
Clique aqui para fazer login e interagir na Comunidade :)