Como faz a contagem dos registro da Query Detail em uma relação Master/Detail?

Delphi

24/04/2023

Tenho em uma das telas duas Grids uma para a Query Master e outra para a Query Detail. Eu consigo fazer a contagem dos registro da query Master e da query Detail na primeira vez que elas são abertas, mais das vezes seguintes eu só consigo fazer a contagem da query Master a Detail só retorna 0 mesmo tendo registros.

Eu tentei fazer essa contagem em todos os eventos "After" do componente TFDQuery tento da Query Master como da Query Detail, "AfterExecute", "AfterOpen", "AfterRefresh" "AfterScroll"

if DMP.QueryP03B_.RecordCount <= 0 then
begin
  frmPrincipal.EplblListagenItens.Caption := '0 Itens Listados';
end else
if DMP.QueryP03B_.RecordCount = 1 then
begin
  frmPrincipal.EplblListagenItens.Caption := '1 Item Listado'; 
end else
if DMP.QueryP03A_.RecordCount > 1 then
  frmPrincipal.EplblListagenItens.Caption := IntToStr(DMP.QueryP03B_.RecordCount)+' Itens Listados';


Tem algum modo de fazer a contagem desses registros?
Eduardo Silva

Eduardo Silva

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

24/04/2023

imediatamente após obter o resultset, execute o método FetchAll

https://docwiki.embarcadero.com/RADStudio/Sydney/en/Fetching_Rows_(FireDAC)#Refetching_Rows


GOSTEI 1

Mais Respostas

Arthur Heinrich

Arthur Heinrich

24/04/2023

Além do FetchAll, já citado, o Pascal oferece a estrutura "case", mais fácil de visualizar do que os múltiplos "if" encadeados.

case DMP.QueryP03B_.RecordCount of
  0 : frmPrincipal.EplblListagenItens.Caption := '0 Itens Listados';
  1 : frmPrincipal.EplblListagenItens.Caption := '1 Item Listado'; 
  else
    frmPrincipal.EplblListagenItens.Caption := IntToStr(DMP.QueryP03B_.RecordCount)+' Itens Listados';
  end;


Ou pode fazer simplesmente:

if (DMP.QueryP03B_.RecordCount = 1) then
  frmPrincipal.EplblListagenItens.Caption := '1 Item Listado'; 
else
  frmPrincipal.EplblListagenItens.Caption := IntToStr(DMP.QueryP03B_.RecordCount)+' Itens Listados';

GOSTEI 1
Eduardo Silva

Eduardo Silva

24/04/2023

imediatamente após obter o resultset, execute o método FetchAll

https://docwiki.embarcadero.com/RADStudio/Sydney/en/Fetching_Rows_(FireDAC)#Refetching_Rows



Testei aqui e não funcionou 😭
GOSTEI 0
Eduardo Silva

Eduardo Silva

24/04/2023

imediatamente após obter o resultset, execute o método FetchAll

https://docwiki.embarcadero.com/RADStudio/Sydney/en/Fetching_Rows_(FireDAC)#Refetching_Rows



Testei aqui e não funcionou 😭
Será tem temnho que configurar alguma coisa no componente?
GOSTEI 0
POSTAR